飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
" m5 `& K- a8 e7 m0 q8 T4 w搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )6 Y2 C. ~5 T* u: t4 `% g7 F5 P
) J  E; Z9 C$ @! v
struct sItem/ ~8 }8 z/ c, j( `9 U
{1 E+ I) V' B& o$ Y4 x
DWORD dwId;
) ?7 I4 M3 x0 y; jDWORD dwKind2;
$ Q( j4 Z6 F7 z/ f) ~; v8 {DWORD dwItemId;# o9 J% N% [4 Q0 o1 v+ c6 x* _
BYTE nIndex;
$ f7 Z# L) U# V  g0 M# a1 t# B6 N4 BsItem(){
9 B2 ]4 Z7 q0 n1 Z9 h  s  dwId = dwKind2 = dwItemId = nIndex = 0;
0 `* j. @7 W7 F}1 p# w$ |1 p( B1 f6 `
bool operator < (const sItem p2)
, {( M! n+ s$ Z1 s{' i6 ^4 {6 e/ u
  if (dwKind2 == p2.dwKind2)* c" e% ?0 f) Z. s9 r; f
  {
2 p3 Q2 ^8 A! q2 l' l7 K   return dwItemId < p2.dwItemId;2 C5 [# Y) B* A" J* f# j' b
  }else{4 w8 o2 K) q' ?  V, f
   return dwKind2 < p2.dwKind2;
% J3 N8 j4 I9 g2 U$ A1 U9 u! A  }
, h4 W" _/ u$ F2 c( Q/ S4 b}
; I* m. I% O" x8 P, j, s9 W% g};6 e6 U# ]" |% z/ ~% w' R/ o6 O
class CInventorySort
3 q2 [4 ?  J" Z9 D: B{
5 A% P/ I) W# d4 }public:
3 b0 K* C2 l; w( U$ G. \) o+ D) O. sCInventorySort()$ z( w9 d, m$ T& I
{( k! V6 S. W$ Z% f
  m_dwPos = 0;3 O2 O" T1 v+ G2 v8 o( p# r
}
1 d' W2 S+ ^7 q3 I0 N$ E$ K~CInventorySort(){}
2 |, `$ \! }; N: qprivate:
; {0 {$ |7 D) ?$ q' X' J' xsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
$ b% ?. L/ t. a$ T9 m9 t* iDWORD m_dwPos;% ?, K  L$ A/ s
public:
9 u/ X; ?8 b  H6 p: [void Add(BYTE nIndex)
7 I# f+ ~9 F% v/ i) S{
* c" z" T" T" j* x  if (m_dwPos >= MAX_INVENTORY)
& S! t! l3 w$ }4 z' p' p  {9 `4 r! i! \7 h  Z* N* L( ^
   return;; W, {/ [  r! S& @
  }/ F5 z+ T( s0 m8 ]# ~
  m_Item[m_dwPos].nIndex = nIndex;1 n0 a: o8 v4 u4 q; Q- M% \
  m_Item[m_dwPos].dwId = m_dwPos;5 ~  P5 k$ t3 D( q# e! e. V8 S
  m_dwPos++;
" l) x2 m. Z& o/ l}) |" \3 g1 t3 `8 ?; ]# Z7 G: s
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列* P! k5 D3 a4 R
{) D* I' w0 q0 u7 M, R1 u8 Z
  for (int i=0;i<MAX_INVENTORY;i++)7 J0 g/ k7 ~' l$ G1 ^
  {' m, G9 I; x! s# i, `
   if (m_Item.dwId == dwId)
0 j+ o! ^  X- i: o4 Z3 D8 C   {! z, `! f" B$ H
    return m_Item.nIndex;
$ r  D: t5 V" K, }- H( T& E9 v   }
+ d/ G' |1 [# L! j& n) E) o  }5 T% l7 H# z2 z% v0 D
  return 255;2 m) b+ O  U& [) t+ V3 U" T
}6 M0 i% p+ p% n
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置( D, ^' h0 A' x" A
{
4 s: [' f1 d+ @5 r  ]  BYTE nTmp = 0;8 t) e% |" e4 h) e
  bool bDest = false,bSrc = false;
+ X+ ]4 r5 H3 \& G# K  I  for (int i=0;i<MAX_INVENTORY;i++)
/ W6 V) U. Q" X7 a: S  {
- P% R1 S' |' u8 u   if (dwSrcId == m_Item.dwId)
, l0 `4 }8 _4 V5 R# X9 ^   {5 h. t6 s4 [' D7 B; @0 h" I1 b+ g9 o
    //id相等 则 改变对应的dest和src# \4 x1 U8 l" _+ y$ `; Z, i
    nTmp = m_Item.nIndex;! M; O- N8 ]( H
    m_Item.nIndex = dest;
0 o7 O' P- ]. \. u   }
/ P/ L/ M0 E* i" p8 s( A  }
* T2 t: P8 ^! V) M  //临时数据保存完毕,交换开始( C& C) D1 p" b/ V
  for (int i=0;i<MAX_INVENTORY;i++)9 }5 m& q( U+ u% g& i
  {; c' |7 f7 @3 @
   if (dest == m_Item.nIndex)
; o$ a, d+ t8 u+ f2 v   {
7 z9 ^# B& ^3 R  O7 e    //id相等 则 改变对应的dest和src- t7 l' N, Q- T& h) @
    m_Item.nIndex = nTmp;
4 o' k8 L0 Z: Z" \' U8 K   }
0 T9 ]  A+ F) x# ]  }8 N3 z) X$ g/ B
}
; `+ J% `, I9 H; W: \};) W, \+ N% t$ b6 |9 ~; @
-------------------------------------------------------------------------$ r; o% R) Q! d2 b
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
3 H4 v) j; Q; q搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
+ J4 n$ I' D. X- h8 g紧靠其上添加:
/ P1 V4 K, ]% \7 D! I8 e2 Yif( pWndBase == &m_wndMenu )( S+ {' X4 M* B4 H
{. w0 z0 y! y- s+ q" ?
  switch( nID ); s! y: d( `) w7 B2 }
  {
. O" T3 f5 G) c: h7 B  case 2:( ^! ~" H# o! E
   {* W8 ~, K+ m. D4 p0 O
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);5 }0 E7 s1 f3 h
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))- R" _% g: D3 ]) i; u1 I+ }
    {
9 |* p& Q% C. X& h8 v( m     break;. v, ?; N) e: M/ q' t- ?6 I1 @
    }
2 c6 `, n1 u" k& o3 f9 q    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
8 U2 R0 \' |. A) D& z5 N, g    {
. M8 P  @9 U5 J' k. O     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 q! u$ ~. ^& m6 T% q
     if( !pItemElem )
3 \3 I0 B5 z- g+ r& g      continue;# L% G5 S5 R5 \, a3 k0 K7 h
     if(pItemElem->GetExtra() > 0)
% K4 ?* g% a! b+ J      continue;" j2 s# i; R& ^; M' F+ w4 D$ h
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )   G) H% W' R# R- d, j$ T/ h* z) V
      continue;
( w6 ^/ f% L( b2 W; D) C     if( g_pPlayer->IsUsing( pItemElem ) )
, g/ i: Y& P3 P0 \5 z      continue;
, ^/ `1 G( Y, I7 J9 w     if( pItemElem->IsUndestructable() == TRUE )
/ \+ l6 U7 E$ ~     {; S+ ~! H! `& y
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
+ S9 `  Q8 V/ ^/ @, \9 ~, H      continue;
) p7 f/ k6 j9 z5 Y6 O     }7 n1 e, R1 V5 q" c) L# V& P- Z. i
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
2 H& V' m1 c5 g4 {$ y# k    }
+ Z, B$ r/ t+ m4 r; L* h6 V$ Q    break;" i, K/ G9 _  o! v3 n0 x
   }# W/ n+ \: J( O: ^. p+ ^* e
  case 1:2 }; X+ R( {9 S) Y+ l- q
   {- @/ Z2 q4 ?$ P, o8 B* |
    //整理背包1 N. ?/ N$ _! G$ N* \
    //////////////////////////////////////////////////////////////////////////1 L" t: A/ \, _
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
3 J4 ]1 [  n  t# M( B3 V5 D    //////////////////////////////////////////////////////////////////////////
) F3 G5 |+ Y% P3 _1 u    //////////////////////////////////////////////////////////////////////////7 @; T  x$ _7 C' j& A; R4 ^9 d9 o% w
    CInventorySort* pInvSort = new CInventorySort;, @( p4 c' K9 Y1 c- D" l
    vector <sItem> vItem;0 f0 j2 y5 r7 a3 \# t! b
    vItem.resize(MAX_INVENTORY);//初始化大小
! x' C& ]- [$ F+ o' {* H4 C' s' _& }     //////////////////////////////////////////////////////////////////////////
8 d: W" X& x) @1 J; [/ t8 H! q% {     //填充数据
) v0 `1 e9 H7 {2 p' X6 j" d% O- o     for (int i=0;i<MAX_INVENTORY;i++)
& t# v9 \; B% R6 a5 O     {3 h; Y# i+ t& T% I
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
! L0 y* j4 R+ ?/ e9 a% [- v. F      if (!pItemElem)
1 S. P# n3 b  h' u. @) g      {
* B/ g, q+ ~  l8 F' }       vItem.dwKind2 = 0xffffffff;
$ `" r* ?8 I) P* x% ^       vItem.dwItemId = 0xffffffff;
! P) n7 Q9 p( x" z3 V7 w       vItem.nIndex = i;
- ], K& c: b  z# w      }else {) Y+ M# ^, |! r' \8 R) |
       ItemProp* pProp = pItemElem->GetProp();8 N) Y+ w/ s; t- U7 W$ I' R. z- V
       vItem.dwKind2 = pProp->dwItemKind2;
( j6 D4 v- a5 [       vItem.dwItemId = pItemElem->m_dwItemId;
5 x8 Y# C. X3 |, @; v, F% T       vItem.nIndex = i;
! o7 h6 P, R1 N      }
9 ^1 o8 d, R1 T6 z; ?      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
9 G- {1 {3 U0 A4 f     }
+ R" W. X  c' D6 a1 r( n; V9 Z* L     //////////////////////////////////////////////////////////////////////////
- H- q% X+ `1 T2 o$ l$ x  j8 ~+ |     sort(vItem.begin(),vItem.end());//排序
6 Z/ _0 {% x  \" r- q     //////////////////////////////////////////////////////////////////////////) \% X5 G. Q* f1 N
     //交换
5 r% q& x! ~$ f- l     for (size_t i=0;i<vItem.size();i++)
8 h! I( ^. [: `0 q     {
( O" D1 i% e8 w5 c) p- @$ J      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
* D2 H4 R7 ]5 o5 g- X5 J+ ~      pInvSort->Add(vItem.nIndex);
7 d5 V& ]  G- }9 M; C# s8 O9 t3 l     }
( w& K; D  q8 N" |8 K* q     BYTE nDestPos = 0;# ?2 ^1 r1 K+ k" L/ k6 t
     for (int i=0;i<MAX_INVENTORY;i++)+ q8 m' o0 z6 T' v4 V) R% A  v
     {
% u' P3 v' X: Q7 k      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);% O$ B& }% H/ H. S' d9 S
      if (pItemElem)
- ^! Q  ]$ b$ e: b. P1 S  u      {
  O9 j/ C# g: {( k       if (IsUsingItem(pItemElem))0 g/ s! L' M/ u3 s' {; f9 T& C
       {. U; o# Y# V, a4 F9 c" w- d) E
        //这个位置无法放; _6 ^1 E; ?! D% R/ E
        nDestPos++;) g' y9 o# h% @1 `& ^4 M
       }
1 K; F( Y( ^3 ~. r( r. S: N% Z      }7 k6 c1 R7 ?6 C# s7 S* r6 r
      BYTE nSrc = pInvSort->GetItemSrc(i);/ h1 s  a' j% N8 X
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
2 h7 k# H% M* b; Q; ~& Z% \8 S      if (pItemElem)
3 m9 s  D- T- ^3 G$ i: q      {
4 i4 m/ f4 w- `$ B9 C       if (IsUsingItem(pItemElem)): q( G" C! L' Z$ k' M
       {
; _: |6 ?+ Y& m! s        //这个道具无法移动,跳过
1 |. _7 ~! g5 ]8 k. c" C1 |        continue;
/ e0 v& w3 p  |* v       }9 F3 x& I! q; ]
      }else{+ R* G3 r5 @( ~9 n0 ]0 O
       //空位置 不用动
" x' R% B% |$ Q3 {; ~, r+ B       continue;4 C* Z/ o4 W. H; J8 m5 F! e3 P
      }
5 ^% p( t! \) {9 M' p5 D% b      //////////////////////////////////////////////////////////////////////////
& W1 ~6 v1 B' o( `( F3 B      //开始移动
* t/ E0 j0 t  y      if (nSrc == nDestPos)
% O; L' O$ l0 r& M) M. `      {3 C3 P. P) A& S: \7 c- l" T6 g
       //原地不动
1 b* h0 |# }$ s1 f. n: b5 V       nDestPos++;
' ]. q+ b" Y  r( }0 F8 e. V       continue;
5 }6 N- {+ g& H0 a, O      }" N' s7 U2 g' `" ^9 S: b
      pInvSort->MoveItem(i,nDestPos);
7 M" c1 C$ z8 h# ~! H6 ^' h/ V      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
- \3 U0 k' i6 F% y      Sleep(5);% l( K6 i7 Q" c# M: \) I% y7 i, F" m
      //Error("移动 - %d->%d",nSrc,nDestPos);$ O/ Z* P9 D7 J, r9 Q! A
      nDestPos++;
. X& q& b/ `) ?# J# V2 f& q     }9 Z' c9 o1 F: ^2 t, F
     //取第一个元素的信息
) m8 m+ R0 ^5 b& ]     /*( Y3 J6 v! X5 C
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
2 {0 q' F' |( V0 t4 j     {6 z( c! o' t4 ^3 t; y0 i
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);4 {* p) |/ x4 \8 N: U$ e9 E
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
( ~" I# J/ ~& W4 c* d/ {     }
  ]7 |& j" x; I     */, c: V6 e! {+ T4 W
    //////////////////////////////////////////////////////////////////////////6 V6 Z* G2 J3 p+ I
    break;" `1 U* ]+ n4 T6 W. l% D
   }
8 d" S/ K# g' v6 R3 C' E. A  }
' D% v4 R$ }& q}
; R# P- M+ k# vm_wndMenu.SetVisible(FALSE);, x$ `9 P1 L4 r/ C

5 b8 |* L- R& b+ \--------------------------------------------------------------------------------------------------------
* f+ ^+ h. z  G1 @$ G3 Q搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)! t- t6 q8 k# r9 g6 M
{
/ Z: |; x6 G5 `+ w" n. |BaseMouseCursor();, Z6 L# j/ [: f2 o3 o
}9 n# v6 H) j2 }" F
在其下添加:
  s* }) c  h3 n+ F3 avoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
: ?) j3 k& u' a5 _0 X" n1 k{
1 G; ?: a5 v/ S( i& u6 _+ _m_wndMenu.DeleteAllMenu();: Q. i5 o4 X; I9 [6 f
m_wndMenu.CreateMenu(this);& F7 X8 e9 a7 R& G
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");4 p$ f2 x- Z- j
1 i; h) y' O6 S6 o) @* r( ^4 W
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
# f9 r) S( v/ g' ^6 m/ [8 e{
% s. t$ ^9 I, l: [6 @5 d  //P以上级别才可以删除所有道具
% H  I4 O+ `/ E5 G7 ^' B$ t  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");+ o) n0 I( [/ u  _
}1 F  n. G2 t% e/ B
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
. q+ F/ v& ~; q. I$ Z+ a# nm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
; s5 O" _5 o( Q( k  S; \# ?5 Km_wndMenu.SetFocus();
; W0 O' S1 ~% b( k1 c& P1 i+ j}
5 D! }1 J1 O; }7 b; M" A------------------------------------------------------------------------------------------------------------
. f, K: H. S/ R, d: u*************************2 Y( y) ?, u' e; N! W6 g1 v
WndField.h文件8 }, J( g0 Q- ]
*************************
- k) w* Z. H" U; F# R# `" Z搜索:BOOL m_bReport;
8 s; I5 V, j) @% I+ b5 W1 o其后添加:) s* l6 h( b1 a' V! x% z: b$ A
CWndMenu m_wndMenu;* p2 K& g" O/ m: |! b
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
1 y/ }+ M: o7 V其后添加:# V) M5 [' u1 K" L) Z& L
virtual void OnRButtonUp(UINT nFlags, CPoint point);7 B" A$ T0 }1 M3 i4 Q

- x* o' _1 |2 B" r& f% K. u2 A" ~: r; M" Z/ S; D" q

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-5 14:27 , Processed in 0.064047 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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