飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1020

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1020
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
, P/ y# V* o8 E! V7 e搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
! X/ `& I3 p" }: k9 z, u7 A7 j
7 M$ k. T8 Q, l0 [- vstruct sItem0 B& Q  c" p) @9 T
{) P( M7 {" x% T
DWORD dwId;% R( T" V6 m' B6 ~5 `: d
DWORD dwKind2;/ r5 i4 f2 N2 P  I& U# |& K
DWORD dwItemId;$ F  X+ d' t- f. c+ M2 [3 Q. l
BYTE nIndex;2 t0 }* G; l# \6 g: y9 z% r' D
sItem(){
8 J) l9 @: K) V1 u; b) V, ]5 l  dwId = dwKind2 = dwItemId = nIndex = 0;$ t% y( }7 w: j3 \; d5 t
}
6 O9 t5 g2 Q1 r7 C4 o/ obool operator < (const sItem p2)
' h4 f) M3 V4 O9 P0 R1 D1 e2 m{
* ^3 r8 @( X0 v/ v  X  if (dwKind2 == p2.dwKind2)$ l' r( j) w* l# `+ S' Y8 s
  {
' ^" o# q! r! ^% d   return dwItemId < p2.dwItemId;1 Z7 ^) k3 U* O& M/ c8 z( I
  }else{' s; S, K+ Z3 |" J4 {1 f5 Q% |. ]
   return dwKind2 < p2.dwKind2;
0 a& u  o4 `- q9 V& [" a+ p  }
$ z8 ?6 Q, S+ w4 P0 X( B: P' ?}) W2 o7 W2 i( [2 |# o0 ]" h
};, |, S$ W& g+ k. Q" B7 {: s7 F* f
class CInventorySort5 z- L& V. T  b* H' j
{; i1 c$ j! ~% n- ~$ n2 H1 {8 Y
public:
- Q- @" g+ {6 e- V! a6 WCInventorySort()8 g+ [& u7 r6 w: g6 {
{
0 X3 x% p0 R2 o3 B: n# F$ G; F  m_dwPos = 0;
% G' q5 M8 g% Q0 j8 e}& p3 z3 |  F5 M3 M6 F
~CInventorySort(){}
. y$ O9 l! ]: v. [private:* }/ B# E! A/ h, [
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息  @! r& w- Y9 O1 U! S$ P
DWORD m_dwPos;
  _6 {  E* u  g- c! npublic:
' r8 k8 C* e4 F9 V% a+ L. Tvoid Add(BYTE nIndex)
1 }4 U8 e! M: G+ |{
' _# j6 ^" _: u/ M9 n  if (m_dwPos >= MAX_INVENTORY)
+ U$ M+ n$ Z3 C2 T+ l  {8 y* e  V- f; `: ]- C8 D: D# z
   return;
3 s  L: a. N; G5 z% T' J8 c  }( m* I7 k  z. e! e& p
  m_Item[m_dwPos].nIndex = nIndex;
: L1 c* c3 U" |  j% q3 C# d  m_Item[m_dwPos].dwId = m_dwPos;
* m2 N0 m# h6 h7 m1 U' I  m_dwPos++;
% w: o: r; |3 |4 i# v}
% s1 ]2 K3 F3 k! L$ i' TBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
  J: {+ ~/ F* Z; h2 {* E  K{
' d$ @! |1 `' N+ U# q# P( n  for (int i=0;i<MAX_INVENTORY;i++)
! k1 D9 U# ]1 z; t2 j  {
) a' M- x+ k. [+ j   if (m_Item.dwId == dwId)
7 O2 v4 E' Q3 c$ p  V9 r   {
# H3 ]& {* z% o+ a' N    return m_Item.nIndex;
# F& [  a. _  ?; p1 G% ^& b   }" E4 J! F! x) ]" y" b
  }6 s2 A2 Q/ Z, _( X7 j& C! |% C
  return 255;
8 K9 E! S: i. P7 x6 w}$ N: I! b0 e* G+ e3 S
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
- ~; ~7 u7 c% v% |: x" X{$ k2 m: a! g- }  ]4 @
  BYTE nTmp = 0;0 p8 C8 r# q" ^! _/ [" @" {
  bool bDest = false,bSrc = false;* `1 D9 j* B, d, z# J9 H. a. O
  for (int i=0;i<MAX_INVENTORY;i++)
: n" \7 M$ x4 Y% \: o  `  {2 x% [& N% v$ T' A+ w2 E7 V
   if (dwSrcId == m_Item.dwId)
# \0 e# G" y$ s; u7 Q6 Z7 X   {' s4 h2 @$ A% Y$ V  ^) {6 \
    //id相等 则 改变对应的dest和src/ X) |# S5 _* N$ [
    nTmp = m_Item.nIndex;
. D  U, y8 T$ }7 x# O5 k* [. `    m_Item.nIndex = dest;
8 m9 Q- C: M- R( ^& H1 j   }3 d" r, \8 I6 E/ c5 h" v( E' L
  }$ v6 R. O' \4 @- f+ m
  //临时数据保存完毕,交换开始9 C8 k- }/ u+ b1 I
  for (int i=0;i<MAX_INVENTORY;i++)
$ i- S8 J* [7 `  {
' C$ z( R7 k1 a8 @, A   if (dest == m_Item.nIndex)/ N( q3 F% _, L; p
   {
# H% n; T0 K9 N( h    //id相等 则 改变对应的dest和src
( p2 O: R3 c% t/ i& Z5 J* a    m_Item.nIndex = nTmp;
1 `/ e6 S% o/ g$ s. e- w" e   }$ `) K1 I$ U" P2 |
  }. F2 M+ c4 W/ r7 D/ a: {5 c
}
# o+ x4 M# |0 Q3 M1 X6 q};
3 D. L2 {2 B& s' |& l- G0 l-------------------------------------------------------------------------
5 t5 W. [- b6 w' Q, m依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
9 e) O; B; R  f" _搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
- N, m9 w; ]6 Z) `- w5 F紧靠其上添加:% Q, A$ ]$ m+ V% D
if( pWndBase == &m_wndMenu )% m- L# P+ q/ x* R- d3 Q" i
{; b( d; M: |8 {! m1 J4 x  C
  switch( nID )3 l) Z: }+ V- }$ }
  {
$ a/ @6 Z  T+ t+ t  case 2:$ F3 f6 ~" D  j1 c5 j
   {
4 Y! R7 x! V2 f) N* b& i8 |* _    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);" ?3 B! z: e0 k7 [
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
7 p9 `( Q6 U# [! C4 Q0 q" c    {
- |  Q* n" l$ T9 Z     break;
+ x. v& r  N& d/ [    }
! i  O5 B5 G; G2 L4 R8 ~; v) ]    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)" A, N- l& V3 _) c+ b8 M# J
    {2 q# K( ^2 q9 w  z! m$ M
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
* v3 V: K8 Y7 ~) F: p; u6 W     if( !pItemElem )
1 K0 d3 }) t- e9 P      continue;
: A- g; I) x! E" U4 l. G$ G     if(pItemElem->GetExtra() > 0)
2 v3 r# r* j0 D4 u& E8 L% c$ r      continue;# K! P6 c* v' P* t* N5 ^
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
9 {% Z/ P- V# N% M" m1 X# d% ~0 N8 s6 k      continue;
- v. j( ~6 N! J; D3 y     if( g_pPlayer->IsUsing( pItemElem ) )
9 r- a) J0 X6 ^3 A! q6 {& E      continue;' |+ S# k, @" G' `
     if( pItemElem->IsUndestructable() == TRUE ); e% Z/ o( y- ~" p
     {
. p, J9 J) Z* V# A% d& J6 l      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
5 X1 V" o) H" g5 J      continue;# w6 N/ q7 r' G$ G) Q+ {
     }
% ~/ N* u" \3 z7 u# ]6 o     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);7 ^6 g! B- q0 D$ e
    }- J" A) S, j  @6 n7 n, m' e
    break;/ [, p  r: z: b1 Z4 x
   }  a, f* V" c3 Z7 _* k* M
  case 1:+ D5 L. X- l4 y% H- y* ~* S" Y& G
   {
- A+ A6 V+ k1 ]4 z    //整理背包
1 X( l0 G' X% @+ e9 e/ q( V/ A3 u1 o! J    //////////////////////////////////////////////////////////////////////////
' F- Z3 X$ |5 ^. A1 u) G8 W0 {    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
. |0 j# a- _1 V5 A    //////////////////////////////////////////////////////////////////////////& i$ s1 X) Q/ J$ y7 o' b  x% W
    //////////////////////////////////////////////////////////////////////////& O  @- f- N- @. g; e2 v3 ^
    CInventorySort* pInvSort = new CInventorySort;6 q$ B: ~( J# M. Q1 j
    vector <sItem> vItem;
* B  _0 F3 O/ |5 Z    vItem.resize(MAX_INVENTORY);//初始化大小
/ @4 i8 y6 l2 n. |2 q, c1 {$ n; A     //////////////////////////////////////////////////////////////////////////4 d/ h$ w, l( q# v  T. O
     //填充数据
1 I. T  i3 x+ [; U. o) L     for (int i=0;i<MAX_INVENTORY;i++)2 @( V1 t" f& T2 }
     {0 X( }% a7 I6 ^; L( \  Q; z8 }! G3 Y
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
5 a* v1 f/ t" Q) D7 {" M      if (!pItemElem), D; y* N4 m+ j" J
      {8 {, P- |2 A: T9 D( N! u
       vItem.dwKind2 = 0xffffffff;
' |" j! h1 P# i# p" K       vItem.dwItemId = 0xffffffff;- H1 y7 E" W- F& t3 r( H
       vItem.nIndex = i;, M8 m8 c1 _- G$ |! p
      }else {- u4 U' ^/ A& j, J
       ItemProp* pProp = pItemElem->GetProp();$ |5 a7 e4 b( g. ]# X, g! o
       vItem.dwKind2 = pProp->dwItemKind2;
% ]7 E) T# t5 ]8 Y7 c9 T. \, N       vItem.dwItemId = pItemElem->m_dwItemId;
; Z/ e! U7 P1 o9 S* x# ^       vItem.nIndex = i;& h8 f8 t2 X3 x4 \4 a: F- s
      }
0 L. x! y+ y0 |      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
" P. F4 b6 g  y. Y. ?3 n. j     }
: g: B0 n! w& M' D' u  x; r     //////////////////////////////////////////////////////////////////////////$ s/ w$ ^7 Z- |, |) G4 V$ M( P
     sort(vItem.begin(),vItem.end());//排序
: f. o7 g1 I0 j) T     //////////////////////////////////////////////////////////////////////////
5 f  G/ [; |# w) w     //交换
9 b  \3 r: @1 D     for (size_t i=0;i<vItem.size();i++)
2 B( j- |* j0 k9 V1 X# v9 [     {4 i3 q/ f: S, J" w/ b+ z; \
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" Y# D# W9 J7 x" u; O
      pInvSort->Add(vItem.nIndex);, a8 f1 g; |. }$ l  j, L
     }- Y" D. I& O$ s3 g) x7 o# a* v$ [
     BYTE nDestPos = 0;7 Y! r) D  t, C7 T$ Z4 x& x  w" M
     for (int i=0;i<MAX_INVENTORY;i++)# `  H- S" P9 O
     {' s( V' W  o3 s5 b# L" X* }9 ]0 ]: J
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
* z) `# g! X7 ?0 l; D6 N8 f      if (pItemElem)
6 n% G. D6 K3 R* p" ^      {
3 Q" A- P  q7 u5 S9 D6 o. ]9 [$ |       if (IsUsingItem(pItemElem))* X' u6 N2 v& Z4 `$ N
       {9 a* ?& h! X" h! D: W& Y. e1 E
        //这个位置无法放' k0 j/ W+ p7 R3 C/ j4 Y2 `* V% @
        nDestPos++;; M. G6 k  a5 p1 W. k; o
       }2 C' s9 M4 \5 n+ a1 e( K
      }2 b) s7 ]. R4 m) R, B' e" X
      BYTE nSrc = pInvSort->GetItemSrc(i);
6 R4 A; E) g: u) e% ^9 ~0 B      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
/ F+ E; i! x* d6 w) W      if (pItemElem); B. x- A  a9 m" [- y, e; r
      {" e( C6 G# l# J4 D* h3 I' s
       if (IsUsingItem(pItemElem))* {- `0 s/ e6 G7 |8 X
       {+ u' ~( X8 m! m. u3 _7 D
        //这个道具无法移动,跳过
/ m: {0 s: L( o+ e6 W        continue;
4 Y0 I5 b1 a/ A7 e2 O       }8 {4 Z5 ~, |6 c! [
      }else{& p0 {$ Q0 x4 ?. G" ?$ t) T
       //空位置 不用动# y' L5 o: g; Y# x& ~
       continue;
7 T  C5 S+ t0 x% e+ b      }
4 Y; o; j/ H( Y1 s& N2 C      //////////////////////////////////////////////////////////////////////////
- ]& E& @; _8 H- W/ s6 B      //开始移动
% X6 e) F& Z# v" N5 W2 i, t      if (nSrc == nDestPos)* L/ s1 `1 _1 b7 W6 Z6 s
      {( i: J/ I  z3 s: {! X
       //原地不动4 Q8 t1 E! }! R8 e
       nDestPos++;
2 L6 d" e3 T9 g, ^( ?  @/ |       continue;! c6 g+ ~* k+ ~' P
      }
% U; p$ K0 X0 E' v; L2 M8 d      pInvSort->MoveItem(i,nDestPos);6 k+ r. L0 x( B0 n! O6 f4 \& ~
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);2 Y% t, T+ j* K$ m
      Sleep(5);4 I4 D) S  f1 O9 X% ]9 d
      //Error("移动 - %d->%d",nSrc,nDestPos);
  T) t5 ?# M, T$ l9 r      nDestPos++;% b4 q4 l/ C) w( c; s& b
     }
/ K+ T) }. Q5 k. B( K5 j     //取第一个元素的信息. X& J& d# E; H
     /*
) v# v) `  s/ v     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
$ j) j1 J* {. ^) G% o     {: j1 I' h& [3 Q' [2 s( h+ w+ T
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
. P0 b6 O' P% b) s      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);' [1 C+ [; }  Z
     }
1 x8 p, W) @0 n. D! G- y     */
+ u" M! u  ]' E0 A  x    //////////////////////////////////////////////////////////////////////////
5 J1 q/ m% J' W6 Y    break;
+ Z  V& t7 p6 u! [' C   }+ x0 Y! R' t4 I1 Q+ \
  }
( l) }" v4 k( Y4 l1 q1 M}5 p: }+ o7 M+ V, Q8 @% J
m_wndMenu.SetVisible(FALSE);
5 p3 O7 s& E3 o" v( f
1 n6 u8 C! ], ~4 L+ I* W9 d--------------------------------------------------------------------------------------------------------6 q4 f6 o3 r, i7 ~5 R: S
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
1 c0 ^  D9 l/ ]! p% X{# V, Y4 i6 K" U3 x( }, k- [) w
BaseMouseCursor();
1 p: H/ u1 d, ^: Y( g6 `- }% s6 l2 j}
+ y- T6 a; [+ N9 p; c在其下添加:
4 r- B$ \% E) a" Pvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
3 \) q1 p$ [( X3 b/ P( ]0 r{
* ^! y0 S5 j) F! B( Q  l- Hm_wndMenu.DeleteAllMenu();
; p' j1 V* ^  [- b! {' zm_wndMenu.CreateMenu(this);( p! k$ [: j( e0 o
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
0 u$ J5 m+ f0 O6 r+ _( g3 o7 o9 O' J3 ?4 [2 R) z# X
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))( ?# b( I4 n$ L# {. I1 v
{
) l. n* C. z+ C  //P以上级别才可以删除所有道具! S6 n" V0 y& r% Z1 S1 }
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");* L5 O' P) ]1 x6 w
}
# {, g5 Q# a7 I- B! ?+ Y' Q: j# i' ?m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );* K- o( P) m1 H" _* |" o/ }6 q% s
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
* L7 ~1 e( z0 V- }m_wndMenu.SetFocus();6 ]: O# t+ [6 n
}
$ _3 e) l' t' ]5 r------------------------------------------------------------------------------------------------------------
3 ^1 j, v4 n2 H) H/ e*************************% t- T9 g: a' C, H9 A
WndField.h文件
. M0 U) J) B' U( r*************************
: M' D1 i% b7 b# E9 E* @8 |搜索:BOOL m_bReport;% I8 A' o" p4 X  r2 F# {
其后添加:. E2 C, ~: z4 Q, P- T
CWndMenu m_wndMenu;9 S# ]! s; i6 d
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);! i2 K7 T" E/ t+ Y$ X) J
其后添加:
1 \; F' W' ], z) @virtual void OnRButtonUp(UINT nFlags, CPoint point);1 x7 G* O/ ^+ ^; G' @0 B+ n
8 {9 I! L. c) A$ ~$ c5 ^

9 n  E2 y  \/ K

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-29 06:31 , Processed in 0.068984 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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