飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件6 T  b; w5 ]% y% E, w
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
6 A; D& L/ f) Z* u& B5 t
* S& c8 e! a5 r6 n) L$ ustruct sItem" P" ?0 U; ?# g7 {7 M: y7 `
{) s7 D6 }/ F+ U1 U$ q/ a
DWORD dwId;
, Q3 o( L. I( z3 s1 Q8 n5 q3 \4 F. N5 `DWORD dwKind2;
1 V: u/ @. }0 ?! }5 M; DDWORD dwItemId;
& n# i2 m' ?& r9 t; {3 lBYTE nIndex;
; t, r8 M1 l$ K+ x4 Z! osItem(){1 i8 ^9 c: ]% R" z5 n
  dwId = dwKind2 = dwItemId = nIndex = 0;
2 [/ K9 t1 b8 A}
6 n, L! A& {( N% O: {5 y5 B( B* I5 Tbool operator < (const sItem p2)6 ~' \& @2 o8 b
{
; l- {" y* ^, K  if (dwKind2 == p2.dwKind2)
/ Q( g: A1 ]8 m0 C7 A/ ~& b& N  {
( X0 `! G  l" c- F   return dwItemId < p2.dwItemId;+ ^+ M* Z: n% t  @6 P
  }else{
8 ], c) M3 U4 l9 a   return dwKind2 < p2.dwKind2;* L+ q7 o7 R0 z+ ^) x
  }
) j8 i& ]" P5 m6 d- K+ |/ d% o}
  v; m+ T" V- s};  ^* Z5 U! {5 d7 N
class CInventorySort
- v) z$ C% R$ ~  u3 y{
# T9 {) o' N1 X3 ~- ^$ spublic:7 `9 _1 b5 m% e2 D8 P
CInventorySort()
  j$ U7 c: g2 h3 D% \1 n- x{  ~1 H! {. U& N# _% E* q4 K: d
  m_dwPos = 0;
- r3 G% i3 V0 D3 h; N}
) h$ F3 ]. E% k7 |9 q* {! I~CInventorySort(){}
7 S) f. v( Q) D$ n$ c' ^private:
1 Y% N4 ^$ u# v7 k+ Z4 \; ]sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息5 q1 D/ }* V6 K! K4 l
DWORD m_dwPos;
3 V) D- y: ^5 \* q# ]1 E- `9 J0 vpublic:' E! F7 i" N# R: `( x
void Add(BYTE nIndex)/ |" k2 i! ]+ W! W. U
{' u, b1 Z( O  F1 a. W. G3 |% U
  if (m_dwPos >= MAX_INVENTORY)
+ q* ?6 E1 s3 V# O3 @1 i% Y' K$ b  {
. S- Z' b& E4 C. y% |   return;
. Q. |% X3 D3 |; K7 W4 C1 K. d  }
& W# n8 o! u# _0 T7 {  m_Item[m_dwPos].nIndex = nIndex;
% J6 x1 n6 B5 a9 x; C  m_Item[m_dwPos].dwId = m_dwPos;
$ w% i* n0 {* ~- C5 e  m_dwPos++;# J& b  K' T# T3 J5 N
}
( ?% U/ B  Y7 Q5 gBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列$ X# q# V( D4 I$ _) C$ @, p
{
9 W: N* l; E* N5 O# L9 ~( `  for (int i=0;i<MAX_INVENTORY;i++)
& W/ F9 l% X5 i. L& G8 Y  {
3 I5 F1 \1 j. n% @# @) h8 ?   if (m_Item.dwId == dwId)  G6 a. Q- j+ v) H' J( U
   {
9 T& \+ {# m" X$ E  r    return m_Item.nIndex;
0 M) |8 c' C  _( `" ?; p) M6 S   }
7 N. b* Q/ w0 r4 B2 p1 J$ f7 K9 L  }$ ~" }7 W7 |4 G8 H7 p
  return 255;
, ]8 L% [( O" f}
0 x- H4 }/ r! Rvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置3 B7 L# j/ G! V0 T) g6 P2 Y
{9 k' A9 S- R+ b# p! S+ [! S
  BYTE nTmp = 0;
3 _: c1 x( u! v& K: i% j1 h  bool bDest = false,bSrc = false;. _$ ]4 k- o% X$ {" G' h
  for (int i=0;i<MAX_INVENTORY;i++)2 r' c0 l' B: x' a" L# n
  {
5 g2 z# O; ~) J& N* D  |   if (dwSrcId == m_Item.dwId): l5 w# J0 t0 k# e
   {
9 B, ?4 y' ?  x, ?# O6 k) P    //id相等 则 改变对应的dest和src
: D2 A0 U. N, q$ M    nTmp = m_Item.nIndex;
, F( R" [4 ?0 ?' G    m_Item.nIndex = dest;6 s" w% c/ z) b. ~
   }
; i1 {( Y2 v. @8 @  }+ {0 A0 I, Y5 i3 k
  //临时数据保存完毕,交换开始, d$ i. w: T; `+ P. a% b0 k9 r
  for (int i=0;i<MAX_INVENTORY;i++)
1 ~# }# s; E8 X% e2 E  {
4 A# j, v& y4 F+ f# n   if (dest == m_Item.nIndex)) @2 p4 q; f3 L; r" J- s! e1 r
   {. M9 B' M' q7 [$ i7 ~1 n. W( N
    //id相等 则 改变对应的dest和src3 @1 {4 s$ H9 {' v0 c
    m_Item.nIndex = nTmp;
  d7 m2 ~: w  H( e0 B* x/ a   }( f, }1 C6 D4 r
  }
; ^4 J4 I! p2 n}
$ V0 g; c( k2 u( k! ^};
- `  [; P# `+ p  Z-------------------------------------------------------------------------
) w( n, Y7 v. P9 C$ H; r  k+ ?% S* ]依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ), G# @$ Q& g. K2 Q3 E; ^3 k- u
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
7 L9 c$ l! P! {) f' E4 L紧靠其上添加:% w- w2 X/ M2 i# y
if( pWndBase == &m_wndMenu )
+ L3 d5 ~6 z- Z( P3 U- U! g6 J+ n. q{+ u4 X, ^2 b5 R# G8 @
  switch( nID )
5 J, A7 f+ c0 \: a  {
) D4 _" N3 @+ Y4 W3 N" z  case 2:: I, y$ G8 ]: @: a4 k
   {; L; N& W* m' Q& j. D! B! l# D5 V2 \
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
$ r( j& @: q# A# \" z9 c    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))6 M$ a: k4 h4 I
    {8 p5 s! p" T/ u# H6 p# f/ P; _
     break;
1 n6 \4 K& N8 K2 [. Y/ C0 u    }* H6 |* n* r' U. |" K: Z
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
. D$ ]. M: d7 H* ]    {; O* E! P" p3 {+ m. a8 a
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 u$ [! x/ \& K     if( !pItemElem )) C' t1 V. O; W" o4 C* P7 b
      continue;6 u1 ~* b1 W1 }* w# n. K0 S  p
     if(pItemElem->GetExtra() > 0)
+ {0 s$ r' I: C2 \. d+ u7 ?; H      continue;
* l# k5 N  g0 S8 Y4 V8 r     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 9 a' o3 [7 @& {5 d8 _4 @7 m* d
      continue;
) o' a5 Y  y. {     if( g_pPlayer->IsUsing( pItemElem ) )
( k+ T$ J: _3 h% y7 X* m: U5 A      continue;
: H. h# G! ^. @0 A     if( pItemElem->IsUndestructable() == TRUE )
. H4 G5 l: D* t5 M, p' I" U     {
; M! K* F8 _2 W0 u% L      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
( b1 j/ X9 v$ e6 z4 [- p" a+ s# p) \) s      continue;7 f/ _' d7 b9 h( u+ ~2 z
     }/ |/ s5 P! t9 S. t0 I
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);1 Z& a& c& H3 X
    }
1 ^2 D3 U" o" A" T+ B    break;7 F: [; S7 e0 O! X( D  M% s
   }
0 j( j' ]( x: E6 t: J  case 1:
. q0 e9 Q( Z4 ]# w' V   {
8 a$ J9 g7 R& W$ L# N# [" e. r    //整理背包6 a2 z/ t" ]) k5 E% w
    //////////////////////////////////////////////////////////////////////////
$ B  E7 w/ ~" k: y( |( W- F. p    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );' C7 ?% H7 F- n0 _* i6 \
    //////////////////////////////////////////////////////////////////////////& `- N8 n/ s! M  |5 |1 u
    //////////////////////////////////////////////////////////////////////////
. m  z- i; T+ Q! x7 K& Z4 B: m: g    CInventorySort* pInvSort = new CInventorySort;
+ x9 ]' \) o. y+ _5 Q    vector <sItem> vItem;, I  E; C  V" j) U- {
    vItem.resize(MAX_INVENTORY);//初始化大小
+ x: @4 E- l: i     //////////////////////////////////////////////////////////////////////////0 Q  `3 T& g6 \( t5 C
     //填充数据
# W, Q/ I3 s1 \1 L' l1 w; x     for (int i=0;i<MAX_INVENTORY;i++)! ]) q+ J* Y( N5 ~; K+ H
     {
: r) b9 W5 q* D$ c. j- V  e* @      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);9 R. S1 n- |! f) Z" q9 q, z0 @  |
      if (!pItemElem)/ E$ I7 i' r: c4 J: U/ Q# x/ h2 }; g
      {8 z- w# {# D, g, v6 ]0 q3 ?
       vItem.dwKind2 = 0xffffffff;$ {1 ?, Q- N0 T- |
       vItem.dwItemId = 0xffffffff;. M+ h. w$ X) S- A+ y6 r8 F
       vItem.nIndex = i;
- R8 |; P8 n. L. Y4 G1 A: X      }else {
& c4 g9 G" l6 w5 ]/ R$ z5 d       ItemProp* pProp = pItemElem->GetProp();
5 X% r9 y; c4 v% Z# \2 v  {. f% _       vItem.dwKind2 = pProp->dwItemKind2;
1 a0 C& s; b- S& w. U; `       vItem.dwItemId = pItemElem->m_dwItemId;
" Q7 }8 [* E5 E, {; ]       vItem.nIndex = i;$ v7 a0 }" V7 w" M* \7 |2 S" r
      }
5 R, Z4 `4 z0 a7 {3 z) f2 j      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
* Z9 Y( B$ M5 w$ B* w  M$ A     }, |! h* X0 M# }8 y
     //////////////////////////////////////////////////////////////////////////
2 t9 P8 A) e" h     sort(vItem.begin(),vItem.end());//排序7 s& w, M6 ^2 _1 w7 e4 X
     //////////////////////////////////////////////////////////////////////////1 r5 ]& _6 I0 A, E& ]; M0 f6 \
     //交换  b5 n4 y7 r, R# C' ]6 y  r
     for (size_t i=0;i<vItem.size();i++)
& [7 C" T! l$ ?" I2 q* \     {
! F5 J5 G/ H$ O4 {, J      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
3 E' Q8 M; q7 S# O, k      pInvSort->Add(vItem.nIndex);! a0 ]+ m* |& Q: M2 K
     }+ I6 [, G1 g& {' g; i$ K6 J
     BYTE nDestPos = 0;7 s9 p: r  x* `1 l1 |- w0 [. p
     for (int i=0;i<MAX_INVENTORY;i++)& J. o& M- H  _8 x" I/ {
     {
: ]" X! b3 K- y/ ^      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
  |1 f9 ~% F8 w" J, C; G2 b$ F5 u      if (pItemElem)
& Z5 G5 d$ [5 V. b& U( h* L( |      {/ L9 P+ |/ r/ X0 A
       if (IsUsingItem(pItemElem)); o0 ]7 ^& X6 d
       {1 l6 O- X# C. s+ f. a( [- i5 L# @/ f0 |
        //这个位置无法放5 S8 T7 d; o9 o( r: D% L( o) a
        nDestPos++;: c' {: f' d$ D% C" B7 i; U; X
       }
2 W3 U4 {3 E' x3 Y6 _" O5 q      }8 i* W( y0 z* D# A, J
      BYTE nSrc = pInvSort->GetItemSrc(i);
& r2 v- m5 E" C% I* i      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);' w6 x% u& W) m' k7 q: I
      if (pItemElem)
; p9 |, P: C: x# \1 k      {0 s  Y6 a5 b% I& S! N
       if (IsUsingItem(pItemElem))
* k% {' o1 R, d       {: G& I/ I! Q  z+ J
        //这个道具无法移动,跳过
) ~; D; ]3 L1 t0 a+ }        continue;1 b$ h& J& N; |2 C# X
       }
& b. I3 ~6 ~/ o      }else{
) P* n7 v: W0 t3 E3 Y% q( n       //空位置 不用动
' v* t( h9 t$ e" ?# U, e       continue;
0 _5 g' e: s! |; v6 X      }3 F: _- M) o% h' q
      //////////////////////////////////////////////////////////////////////////. t% I; h1 W6 }4 Q5 H
      //开始移动
% w( y$ o7 a/ }      if (nSrc == nDestPos)
& U' l) g$ P; f: b      {
# x0 a% [$ }& h. L  ^: z% y       //原地不动
2 y& Q  @3 r+ A! a( `       nDestPos++;# @& b% ~# i+ l  v9 X' y1 H: H
       continue;
# I2 R( q$ b/ V+ n" |      }
6 _0 {! L! y" A9 a+ K      pInvSort->MoveItem(i,nDestPos);- c( k' ?. R* d% p
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
* }: T4 b; J; `$ ^6 G7 M6 ~" {      Sleep(5);* ^) F% b/ I* \0 x5 h* O/ T
      //Error("移动 - %d->%d",nSrc,nDestPos);
3 u* N( q* ]/ {% W, T8 w& h8 o      nDestPos++;
1 W8 S1 K8 [# ^% |& h- h# k     }% u- D3 }+ `" D( c4 i# d2 `
     //取第一个元素的信息
2 p, m, j  r" [, \2 H2 N/ A     /*
; R5 B. p: r: \" b/ o& \: s     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)) Y+ W2 J2 k- w. ?% o5 k' \5 @
     {" M& s, F* }0 Z$ g
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);* {; m) ^& x5 s' g
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
+ _# h3 Y$ X& C' U, ^+ {8 B7 h     }
6 `0 o% v, T& E8 |4 a  A) R5 @     */
2 t/ Q6 G9 m) f; C6 S: e    //////////////////////////////////////////////////////////////////////////
, D. Q, d7 D' A6 A8 k8 O9 \    break;7 r+ [5 p- L1 v; e: a/ R
   }; h+ U7 C  n+ L. s1 x& v- ?
  } 9 M" T9 J3 J) ?! x" T8 e
}; d3 n: u8 s, p5 y- q" v
m_wndMenu.SetVisible(FALSE);
  e: `0 W- ^, H* t+ c8 P, s5 R$ }+ p8 Y2 Z7 o* J
--------------------------------------------------------------------------------------------------------2 l' e' d' t% t8 f! f' p9 }
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point); a3 n+ N" M1 t
{
/ U& i4 S0 a4 r1 VBaseMouseCursor();; g2 O- o9 y5 R' P
}
( z7 g$ X, E' v' M  j! L在其下添加:
( e; P$ W- I" uvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)6 c& G" N, A% Z3 s0 W; E
{  X5 \: Z$ {; c5 P
m_wndMenu.DeleteAllMenu();9 k- `9 {2 ?+ w6 X# N7 Y3 @; M5 a  X' L
m_wndMenu.CreateMenu(this);6 k0 o1 ?; M/ g, }9 u
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");  ^- \2 P; z5 F3 w1 d
, L: c- ?- M5 B- q4 z; W
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- ]! L, H5 ]6 z" l{
$ B- Q6 m; Y4 D1 `  //P以上级别才可以删除所有道具
7 k# r+ Q1 d% F! B  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");* v; x, X6 z! p) V% V
}
5 G  \% r; r. `: F8 }9 Ym_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
: F/ i' `6 k7 s% @6 A2 Qm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
/ k# K* G$ K" Q$ S; i# d. Om_wndMenu.SetFocus();
. P1 d+ D: C3 t* E}
# B! ]. H+ F8 d- n! N# t! w  Q+ X------------------------------------------------------------------------------------------------------------
, A4 a" Q# e- g# x8 W*************************/ N( J* `; w) q- S& z* M0 E
WndField.h文件- U. B* P: x1 e  b2 Y! V
*************************
8 o* i6 P3 j9 L2 H% d7 Z7 o搜索:BOOL m_bReport;
2 w: B' O3 c; _8 Y$ x* W7 {' O其后添加:
6 T* `5 s3 f; ?' l6 dCWndMenu m_wndMenu;. `5 j6 [" }8 x' D2 d
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);/ n! n6 y, G, k5 U3 x
其后添加:
' [$ v  u. q5 B" }- Avirtual void OnRButtonUp(UINT nFlags, CPoint point);
4 Y3 U) k/ G( P- H' ]( `5 {3 p0 o/ h% U  S( f9 h' u

" X, l; Y; ~% t4 [' b$ a

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-25 20:31 , Processed in 0.065647 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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