飞飞世界论坛

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

一键整理背包

[复制链接]

200

主题

203

帖子

984

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
984
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
' G! `0 I; p- h2 e0 C6 Q4 i8 \搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& `0 y" [4 A' O0 ^* b1 K: A
2 e: S2 I6 X* `6 E* B0 I3 {! K
struct sItem- f$ X6 s, a3 @! x6 P* W4 \
{
' Y3 @8 l5 H+ H( ?+ kDWORD dwId;% s' A) S6 q8 Y! T1 T7 |
DWORD dwKind2;
, ^! e, l2 w7 Q. vDWORD dwItemId;% u3 p8 B7 S, `5 l% p5 d) R
BYTE nIndex;
. \9 _8 r2 g( U7 S4 y- {1 GsItem(){% u. J( v& M- d7 B9 p8 Q* [1 `
  dwId = dwKind2 = dwItemId = nIndex = 0;  G2 b5 B5 ?2 m, T! \, B
}! m& P1 R/ i9 _; @
bool operator < (const sItem p2)0 n1 U8 T" {* v
{
( B; p$ V( p9 Q1 W; b8 W7 f  if (dwKind2 == p2.dwKind2)' P3 c2 v" s' [# n" e0 f; T
  {3 }# ~$ e  |0 ]+ E" E) ~7 W8 I  H
   return dwItemId < p2.dwItemId;1 V6 ?0 ~0 O+ c& m8 U
  }else{
( f8 w- `' l/ C5 v( t, H9 D   return dwKind2 < p2.dwKind2;7 ]2 W7 E$ h# W- o: @. h4 A
  }6 [0 Q. q1 N2 h1 d2 i! H
}4 u: M/ R/ l5 B; x3 i
};
# b" r, `: x- Z0 \* A# a: H& Jclass CInventorySort
7 k( M1 Z& q8 e# r: T{& O3 Q2 w2 O8 J8 _# Q# g
public:
4 D+ v  h0 v9 k' h  M5 Z6 CCInventorySort()6 ^/ c. g3 A/ P8 n* ?# U% }* e
{
, R7 E! K0 i. e+ F$ q0 i  m_dwPos = 0;" W3 n$ D. M- W% y$ [4 h3 x; n& i
}$ G6 L8 n) O2 c- a0 z0 f3 d/ M
~CInventorySort(){}4 `' y6 U* Z" P2 n7 L6 U
private:
% h% F4 y+ \& {9 YsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息" e4 I, {( D3 k/ `; z# O
DWORD m_dwPos;
% q1 E2 r9 w, m0 W( [6 Gpublic:
& w$ b' l# L# H7 F5 }! vvoid Add(BYTE nIndex)- A- i! ^" [, H( j, {
{
; I6 j$ A! c8 e; S5 f, ~8 l  if (m_dwPos >= MAX_INVENTORY)
, c! P% j5 V; F- ?  {
) D% z) |0 f5 T2 \5 K( j   return;5 G& Y& @- V& R( Y0 ]
  }
8 L9 X) k$ _1 b  O+ d) F  m_Item[m_dwPos].nIndex = nIndex;
2 {# A9 Y5 H4 S# U+ V  m_Item[m_dwPos].dwId = m_dwPos;
$ w$ Z, O0 G* R$ R* @( J  m_dwPos++;/ V+ v! C( u% g3 N* V' g! F
}3 j$ Q. a% r& j3 m8 V( s
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
$ M: g, G; y# B% W6 Y{
8 @- n, J6 ~& L- ]6 s$ N" {, G) l/ K  for (int i=0;i<MAX_INVENTORY;i++)
2 n! ?$ Z3 [& [& R- k5 Y, ]4 J  {" N! {" h4 K8 j
   if (m_Item.dwId == dwId)- Z% Q, G+ D8 N8 Z
   {
2 p: N' T4 g$ V8 Y* \' p. B    return m_Item.nIndex;
; _! s% F- h, ~* Q   }; Y! v1 r# ]! t0 C1 B
  }
& r" V7 _( J+ h  return 255;7 Q1 c; L5 k8 k! P% B2 n+ C
}* L8 P5 N; v/ x
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置& w7 x! v$ `/ T9 \7 w5 h
{
( K9 \: ?4 x/ x% t" C2 u$ U  BYTE nTmp = 0;" h* P5 p. N/ K4 G& d
  bool bDest = false,bSrc = false;, k; h$ q7 f+ _$ Q0 E& s4 ?0 {
  for (int i=0;i<MAX_INVENTORY;i++)9 V7 Q- j0 ^1 |2 e
  {7 {! ]/ b  v' D  q
   if (dwSrcId == m_Item.dwId)8 k: K4 a" n! d7 |& r7 v
   {. ]9 `7 e+ d- f! M( X( W, l
    //id相等 则 改变对应的dest和src# e. ?% P+ W8 }) p# n
    nTmp = m_Item.nIndex;' @4 d! v/ q  t! _3 D0 e
    m_Item.nIndex = dest;" Y5 _4 Z' p* R1 O0 x) N
   }  }1 X! E0 _6 D) p' K
  }- I4 k9 ]" P, j
  //临时数据保存完毕,交换开始
9 k  ]: l3 B$ P) g  Y: l  for (int i=0;i<MAX_INVENTORY;i++)
' T8 _6 U$ G6 `9 c2 L  {" E& p7 o+ }6 ]
   if (dest == m_Item.nIndex)' Q" h+ b- \2 Z; s
   {
1 Q& p) O8 v. L/ `! J    //id相等 则 改变对应的dest和src* ~$ e4 X! U. P) T& n# g8 A5 [
    m_Item.nIndex = nTmp;/ Q# G- O% y" p9 k
   }
* l% K- g4 h: z# j  {" k  }' I6 H) ^3 F& x  {
}
$ F, I2 N- u0 _. d' |7 ^};
: S- J1 c, {8 [$ ]-------------------------------------------------------------------------+ b4 ^6 h% F1 @9 g  z" {
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ H- }# [3 T4 s) m搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
4 F" _$ [- v; h+ j# e8 ^. e紧靠其上添加:7 l+ V! H" P5 ~6 K- x9 ^- ~
if( pWndBase == &m_wndMenu )$ _/ G4 F8 t4 ?0 d
{) g+ o9 S: }+ v" }) l6 o/ k
  switch( nID )
  r7 f/ |% O) G7 x, r; U' s! O# {  {/ Y, o; [) x5 R, Z
  case 2:
0 a2 e0 G1 \4 T# [* l  B: m   {
1 Y" h! B% j  d; _    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);" Y* V0 g7 B* l& r/ Z2 `. z
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))$ E* H9 a( b. @2 K' J
    {2 R1 R1 f- q8 ?4 M9 B
     break;1 M4 e3 W5 N+ z4 |2 Y1 Z
    }
0 E2 j8 a# [5 v. @6 D; y/ K    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
8 o+ f# {4 J" j% y4 N/ E" m6 a    {
" q0 N" S8 y5 L' I7 f     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
# M; B3 T. {8 H: P4 T; M+ F     if( !pItemElem )
* [3 y0 S" u, ~      continue;+ q1 M2 _% I6 I
     if(pItemElem->GetExtra() > 0)) c: o2 O! j: h5 a& p$ _8 a6 X
      continue;, l* J) N3 E) Q
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
* E. Y: y- w9 s: K) r      continue;
  X3 W4 S3 |4 q$ k6 f: V! W     if( g_pPlayer->IsUsing( pItemElem ) )8 w& ~# h$ F1 X& |" w% [4 Q
      continue;- {' L: R, n0 k1 N5 ^/ v6 ]
     if( pItemElem->IsUndestructable() == TRUE )
3 E/ m  v* i$ a. H- e& d* a6 R" g     {
( m8 K& S* `" N* p/ D      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
" |0 z' u: x; ?      continue;
8 K6 ~  H+ S1 [) n& y4 ?     }: A, c* k) S) g# `4 Y
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
# h( B' Q! V+ y$ s  w  s' Y4 t    }
6 o9 W4 n. n9 N0 S1 X. c8 _    break;) M+ @, K# A) c$ @1 s
   }9 `7 \  ~, p+ t/ o) p
  case 1:$ B. _% R/ P. E! S8 W8 N
   {6 X/ O. k/ T& I+ P. W. z$ s
    //整理背包
+ p1 T2 T, ~+ _* u2 Q, `2 W5 r8 }    //////////////////////////////////////////////////////////////////////////! z& G! o0 w6 ?( U7 G8 l/ k
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );7 y# ]0 S- \* C% q& `& q6 I$ `
    //////////////////////////////////////////////////////////////////////////4 v7 O5 E: j7 @4 T$ G# r
    //////////////////////////////////////////////////////////////////////////
0 d8 V1 }1 ?6 q6 u  V) f* u    CInventorySort* pInvSort = new CInventorySort;6 Y- H& G2 ^0 e6 R7 H4 }
    vector <sItem> vItem;
3 o. a- ]- _$ t( C8 c/ l    vItem.resize(MAX_INVENTORY);//初始化大小  K( W. S' c. e% i% ~& f+ J9 x
     //////////////////////////////////////////////////////////////////////////
, B* B# P; G- @, \; S& u! B     //填充数据
" V' i5 C9 v( [4 m7 q     for (int i=0;i<MAX_INVENTORY;i++)/ v( i# M# x) ]$ v3 T! R) M1 d
     {
% H1 ^( J! s0 U. C  W      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& r4 W' _6 Q3 u# e
      if (!pItemElem)
9 _: G: {7 |3 Q: F! ?      {4 Y. u6 `! M% U- q& B
       vItem.dwKind2 = 0xffffffff;% A4 s' K6 i& J6 W' l2 J4 ?
       vItem.dwItemId = 0xffffffff;. f1 u( L* n. ]2 o8 n
       vItem.nIndex = i;
0 Z- f$ |# y7 r# ^( n      }else {
/ g( p0 A* y8 O+ @       ItemProp* pProp = pItemElem->GetProp();' J4 w8 O% g7 W8 J: \$ c
       vItem.dwKind2 = pProp->dwItemKind2;
( z8 @0 \2 x1 r1 A       vItem.dwItemId = pItemElem->m_dwItemId;7 D, G3 x; \- N
       vItem.nIndex = i;. Y4 ^9 T3 G: M5 m! H$ t
      }
+ A" ^& J; A7 o      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
6 |& K; y) ?; _2 k* J2 `! E) T     }+ T4 d! c) F  H* o2 G6 B+ ]
     //////////////////////////////////////////////////////////////////////////
( L' a8 }+ S1 P( P2 g     sort(vItem.begin(),vItem.end());//排序
  I$ L7 V; ^2 o. P# e5 N9 X     //////////////////////////////////////////////////////////////////////////& Y* q( t- s' x5 O& X( j2 p
     //交换
$ P; v0 v7 T: V; X! y     for (size_t i=0;i<vItem.size();i++)
4 o. u+ b0 h) {+ e6 I     {! m# w5 K6 Q6 `
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);' I  N; e4 u# l2 {
      pInvSort->Add(vItem.nIndex);3 O9 k" U: z; A
     }, S( u) ~7 J; J! p% j3 ~
     BYTE nDestPos = 0;
) U, O% E" g, n     for (int i=0;i<MAX_INVENTORY;i++)1 c/ _9 v6 Q! A
     {
- R* l  E/ Y$ V5 }9 Z5 z% C      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
' c% _0 p% q9 F/ M      if (pItemElem)
0 E0 [9 ]9 }# I- g' t8 ]8 `      {
  O/ X( L: S* w& A       if (IsUsingItem(pItemElem))
* G$ O9 V' X, E/ S7 L/ y( L/ M9 u       {) b6 x8 H$ S# R: S5 a+ b
        //这个位置无法放; Q+ \4 {1 ^: ?0 O* X
        nDestPos++;
5 K/ k, ~! A/ y       }0 J6 O; k# X. H+ `* i" u! Q  y
      }" \( j# R5 K1 ~/ _9 P% `
      BYTE nSrc = pInvSort->GetItemSrc(i);
7 G( ?2 I' I9 A, N! W0 e2 O/ U      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
# |( P4 F2 m5 i      if (pItemElem)
6 a; D* A' V- o- u' ?      {
$ m' V* W  _) Y6 l       if (IsUsingItem(pItemElem))
9 V2 Q2 x" C6 l1 }4 e' w8 w       {! o7 M- L& ^9 T: @+ Z6 g
        //这个道具无法移动,跳过5 [$ u' L% m/ Z/ ?( L6 l
        continue;
/ L- }/ A# y6 n9 b2 f; n# v* R       }
* H' `/ m) u5 `  b& n0 C0 ?7 x      }else{  H1 ]. O8 a  v0 p3 i6 V
       //空位置 不用动9 ?5 z9 i4 O( a! |( t" i4 G
       continue;& K$ K0 r9 B. a! [5 L- f- F& }
      }5 f9 f3 B$ O- {" r3 n
      //////////////////////////////////////////////////////////////////////////
7 w8 b5 B* W: W      //开始移动
  P, ~& P3 x1 L4 a: [8 `. A      if (nSrc == nDestPos)1 q% V! O8 t8 y5 y! x* n4 G! T
      {" b, H" D6 x, y0 [0 ~7 N6 ]' w2 i
       //原地不动
, z3 q6 z9 z' v) w  x8 c       nDestPos++;0 e3 R* g% r/ {0 X* R' P3 n
       continue;
& C) r. \* P0 K2 M      }2 f/ X- v- R% h: c# z4 s. O1 R
      pInvSort->MoveItem(i,nDestPos);
, W! J+ V5 v3 J- U0 U9 {      g_DPlay.SendMoveItem(0,nSrc,nDestPos);( H# j. Z2 ?& u. `9 H/ I
      Sleep(5);2 U' p/ d" G# o: t
      //Error("移动 - %d->%d",nSrc,nDestPos);
6 ^! b" d: V* i  t- k$ w      nDestPos++;/ z2 B1 {  T7 l! K8 j/ p- ~
     }$ T# i( z" L8 }9 S" i* ~
     //取第一个元素的信息1 O! y$ L* |; X' R+ X4 G: u
     /*% L/ F: `2 s" e1 l4 B
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff); y+ I# X' D. e3 n! i" ?- v
     {
5 W7 E  M$ E; ^, R9 R2 i      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);+ O; I+ h9 Q4 V4 |- i( a1 ^
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);5 v& C2 ?- V6 s/ J
     }! s8 N* ]3 L* P* K& E
     */
1 I% Z" F2 y1 s% C( z. v    //////////////////////////////////////////////////////////////////////////8 s" B) i" W. ~4 P4 ^
    break;
: a- G" k, R5 u; K0 o   }3 o: r$ x3 f' [/ X
  } 8 H0 R0 M- N& F1 p( ?
}2 h3 q) Y5 X0 X1 e8 Z
m_wndMenu.SetVisible(FALSE);
0 }" j- Q% P  b
1 i; k1 q; |" R+ }* [& c6 Q5 ]--------------------------------------------------------------------------------------------------------
& `* q7 ]4 d! F! `$ s( y6 j搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
4 m% q2 l) h$ R3 O0 d{
, F' M) F8 z9 S# T$ f1 ^BaseMouseCursor();% R  q; `+ D6 H" w
}
6 b( h4 y# o+ i: C在其下添加:
4 e/ r1 s8 b' q" {8 Qvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
  ^% z8 P% T2 j; o{
" e. u2 _! ^; am_wndMenu.DeleteAllMenu();/ l1 e- s7 k; M; F
m_wndMenu.CreateMenu(this);
5 W' y. O, {# c# fm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");' W4 t) I' d5 K" [: Z
2 e9 x; s0 e6 R. }. e) `) `3 I
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
9 ?7 {- P) G% d# c( S{
$ O# X$ u9 O' Q' V( p3 n: O' [- R+ Z  //P以上级别才可以删除所有道具, ]/ h3 @) c2 M2 \: u
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");7 J/ k/ Y8 e9 y2 [, [. B
}- b8 X- Z5 M2 c' c* G3 P
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
) G8 g/ `8 k- P; `m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );( _0 [, Z1 X+ T
m_wndMenu.SetFocus();! x# j8 {' Q" U+ `% q/ J1 N4 b
}
/ u! ^1 ~- p. t, O/ h7 A------------------------------------------------------------------------------------------------------------$ B: t' O5 h0 D$ N
*************************( ~$ d: X" O- \) x
WndField.h文件- l4 j2 ~4 x/ o+ h/ A
*************************
6 Z  e# r' l# v4 @( v% L搜索:BOOL m_bReport;
  i4 _$ r: }/ \& ^其后添加:
1 G. P3 [" ]6 N: xCWndMenu m_wndMenu;
, A- t# }+ }  N2 Q& W搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);5 L7 [3 M$ ~  V% l) ~9 M4 N8 M
其后添加:$ k+ i1 N; ~+ s3 v3 W
virtual void OnRButtonUp(UINT nFlags, CPoint point);
3 o7 Z+ Y) J7 b9 A: M  h
1 K& w5 J3 t( a$ @/ ]
& H& U8 O# ?$ o5 q9 a( I

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-15 02:37 , Processed in 0.066730 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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