飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1088

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1088
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
4 Q9 m: V3 {6 r8 p% d搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
; L# {  o: g( i$ ~* {
8 [& z. X3 K. vstruct sItem* `3 M. i& [) G: j
{
! s6 c$ n  g, `$ jDWORD dwId;, u% j& Q0 N' A8 \9 L* }7 C
DWORD dwKind2;
- W" s% W& L$ q0 k: Z& |DWORD dwItemId;+ U3 `6 W8 l0 C1 z% P1 C, c
BYTE nIndex;3 f* y7 [) k9 a+ ?
sItem(){
" ?" w6 [$ y" ]7 H+ a  dwId = dwKind2 = dwItemId = nIndex = 0;% G! p( p5 A3 F1 P" l! {. h
}4 j$ z) {% O2 `# ~/ Y$ S7 g
bool operator < (const sItem p2)6 G, I8 _3 ?0 n; a
{
/ H+ J* S  O! T" L  if (dwKind2 == p2.dwKind2)! ^- h! ^6 ~; C  r7 Z8 H
  {
! }; O* |/ K1 }. T$ W   return dwItemId < p2.dwItemId;
8 U2 N* i. E* X; a  }else{
# \: j- I8 X' o6 |4 `' K* {! c   return dwKind2 < p2.dwKind2;& X5 l8 F/ v: C' c
  }7 Q% m- g6 c# U# c) G; b7 y
}
, I) u) ^- u5 H7 w" `* B+ R};
" {/ p% i7 }& b! Eclass CInventorySort
! Z' |( P0 b! T$ }{" Z$ j) U3 X" ~
public:, I+ h% d2 l; t. I4 T% X4 _
CInventorySort()
$ `: ], z# e( z8 \. f{
' i1 O" o" `0 O. T) O  m_dwPos = 0;9 t8 L' z2 B% O: [0 A
}
4 j5 p* Z% x9 I4 v~CInventorySort(){}# t' d$ ~4 O' M" ~) p" c& j" N* i- p
private:
$ p* Z8 q+ i7 p; PsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息1 j( K3 E  O4 D; v8 y' R
DWORD m_dwPos;; f& r/ V0 L/ G/ n9 S$ t% `0 }
public:
% W+ x- ^& K7 O; _- x: Q7 c* ]9 N: ^* Fvoid Add(BYTE nIndex)# p  e7 ^1 ~/ X9 B0 m3 a7 k3 W! D
{$ B: U5 E- i( D2 A' J
  if (m_dwPos >= MAX_INVENTORY)/ ?# x2 V. i) @% q
  {
2 k  L" l7 h- |' h( H   return;
; H' ^) g9 g% Y  }4 O/ b# u% \- e1 K2 V+ a7 D, B
  m_Item[m_dwPos].nIndex = nIndex;
+ r6 h# D: q& f, P7 v  m_Item[m_dwPos].dwId = m_dwPos;
9 b' S2 }* p! I* E  m_dwPos++;3 V3 L/ O2 }. ^! Z* {
}
: t) l$ d2 h8 B, M3 ?" u& W2 ]BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
1 A' l& W/ B% p{
: F+ j/ v2 e4 n8 A* M  s; M. ~  for (int i=0;i<MAX_INVENTORY;i++)
) B3 Q( _8 E4 |3 O4 X+ o1 H  {  F: T& X( z& c# R
   if (m_Item.dwId == dwId)
8 x4 @5 a5 G0 u8 r) t   {
( w7 j& r+ C* V4 h    return m_Item.nIndex;
9 z" q  x. I5 b8 F7 w1 X0 z   }$ ~! M/ J' k/ q" [
  }$ R5 x" E- f4 |2 h
  return 255;( j  Z$ R4 y, {& Y$ g* L
}
. _( i7 Y5 w8 C7 H. [0 `void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
  F8 C" @7 i% U* Y{% H$ G/ w9 L* w& I
  BYTE nTmp = 0;
# m1 ^; V) t7 _& q- ?  bool bDest = false,bSrc = false;
2 z6 ]0 `9 |7 o6 E' ]) S" E  for (int i=0;i<MAX_INVENTORY;i++)
$ ?; Z8 e! D7 j' S: U0 W) F6 H  {
! B8 G2 L! c2 h  F0 _: }   if (dwSrcId == m_Item.dwId)
7 i3 ~$ E5 a2 O" {, G   {
; J. F% k; E% W5 q' H. E    //id相等 则 改变对应的dest和src
* c7 M7 n% f; p    nTmp = m_Item.nIndex;
! Y$ B! _7 H* ]4 e; q1 h    m_Item.nIndex = dest;4 A# Z1 y6 C+ \) s" b4 c
   }& a$ I! D0 X3 r5 `
  }
0 K2 q* S1 m  }8 X) \  //临时数据保存完毕,交换开始
8 d6 x# N( D' x! ~$ u  for (int i=0;i<MAX_INVENTORY;i++)
) B7 q  c3 g1 F  {
) z; b0 f5 j" T4 I5 c) P   if (dest == m_Item.nIndex)3 O' _7 y* y) f
   {0 ^; S' O9 L7 v
    //id相等 则 改变对应的dest和src
8 d8 ~. k, W1 a: p3 B: v2 `5 ]& R. p    m_Item.nIndex = nTmp;, P5 y& {/ h& D/ f6 W- ]
   }
5 U9 N, D" w, m  }( E& }! f4 I+ L3 j, G- v* b" E* H) u
}
, L2 ]) O% O7 v: K2 ^};
0 T$ N* C0 b$ f5 F7 U-------------------------------------------------------------------------
- u! {" t6 {7 U$ o依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). n* i; o" e7 k; y$ D- |
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);" t# X, z" `9 X, o: K1 o
紧靠其上添加:% e( |+ ~% P  p2 I
if( pWndBase == &m_wndMenu )
8 l; S$ a3 f. j' y{
2 h/ x, F3 S( q8 r, i  switch( nID )
; d- D7 A& ^2 z) M2 A  {9 \3 {$ N# g, C- H4 w" m# M
  case 2:9 i. _; r$ h9 S* ~
   {
+ x& P% s! w6 K5 i" W- Z5 t    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
3 j8 \$ I) [7 P8 v    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
1 Y3 s" y) b! Y' v7 M. }    {" C6 j& Y* I! P0 W
     break;6 Q/ u: ]5 T; U
    }
, B' @! [  X& L& h; R1 ~# ?4 Q# F    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
* {$ U! i  Q% X! I  a; A    {: a( G. v- O" o/ l) d, ~- {
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);" g( M/ z( j5 i
     if( !pItemElem )
  v/ D1 a* v& j3 q0 x1 G$ ^      continue;7 v4 U7 J) t: z5 Q; v
     if(pItemElem->GetExtra() > 0)/ s" Z1 V, I/ I& u9 ^* z
      continue;3 R- s1 L; N6 \: |1 A
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) : M% ]" R6 {# W* z* V2 |
      continue;; s3 Q7 v  P8 i0 i1 e% j
     if( g_pPlayer->IsUsing( pItemElem ) )
: e+ o. s, A* z; U, j5 s8 Y' i      continue;; ?! k6 E4 }7 l  F. C
     if( pItemElem->IsUndestructable() == TRUE )
7 {. V9 r  A- W/ @5 P     {( O" o; C6 S) n, [. m. o  A* e
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );% ~  l- q+ O+ L' ]2 \7 K
      continue;
$ ^+ S/ Q: P& I* N+ [& L4 w6 ?# y+ {+ ?     }
, t# x2 Y5 n, N2 v6 s4 U     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);% T! A/ o. u/ R  |0 a& t9 f; p! |( Q
    }
, b: R6 v, g6 X) Y" _/ V    break;3 Z4 K: P) Q1 h- A) N
   }
* N" X- P1 _5 L/ i! t( s) h+ ~% M  case 1:( k6 g" h: @7 C4 q* P$ a
   {
# {* q; d4 S- O/ ?6 f/ l! [& K8 f    //整理背包- C% x% ]* z3 C, O4 F; F) V1 v2 E
    //////////////////////////////////////////////////////////////////////////
, Z" M1 j6 }3 K7 M2 o/ A    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );. c$ |# U: h/ B7 `2 u! c
    //////////////////////////////////////////////////////////////////////////
- V* ?$ J  i! C$ L/ _" z2 H) n( z, k    //////////////////////////////////////////////////////////////////////////
2 Z6 o0 a/ ^8 t1 n# E2 K. j' G: Z6 Y    CInventorySort* pInvSort = new CInventorySort;# ?. q7 ?/ S- L4 r
    vector <sItem> vItem;
0 T2 t+ a" Z3 T" j8 A! D; `    vItem.resize(MAX_INVENTORY);//初始化大小
1 c! K$ z3 a& i     //////////////////////////////////////////////////////////////////////////
/ N3 ^% q, G) C# Q' Z! U6 \3 g& R0 o& w     //填充数据0 [4 C$ `2 o1 U( @" ?
     for (int i=0;i<MAX_INVENTORY;i++)* L4 d; n: F6 F: v
     {% ^+ g" p% i* p% C9 b
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
: q8 l4 ^! [) M' P/ V      if (!pItemElem)$ V$ @! ~9 H% K' e& D& W
      {' d  k' s  d  K1 I
       vItem.dwKind2 = 0xffffffff;4 \3 t- V9 p: Q1 p- s: R, R% ^
       vItem.dwItemId = 0xffffffff;
7 I9 z3 r& H" q       vItem.nIndex = i;2 Z2 T+ v4 E: L$ Q2 A
      }else {
/ _7 |: c: y, K8 i5 Q: V       ItemProp* pProp = pItemElem->GetProp();& t1 b" a/ k9 `. L
       vItem.dwKind2 = pProp->dwItemKind2;% J; Z! w! V. @4 e' {
       vItem.dwItemId = pItemElem->m_dwItemId;' b7 p5 i1 E" D4 C7 V  u2 l0 Z7 }6 u
       vItem.nIndex = i;% G8 Q& i4 S9 X5 d
      }
2 Y1 L: l6 N. `9 ^& ]4 D- n      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);% d9 s/ d/ U, g6 c2 e, |
     }/ T# Q) X* U+ ]* U* d
     //////////////////////////////////////////////////////////////////////////
3 d8 d0 S0 |7 ^5 J# B     sort(vItem.begin(),vItem.end());//排序
/ Z" N8 I) ?0 s9 l     //////////////////////////////////////////////////////////////////////////
+ U2 G, E1 x) Z2 X  z2 l$ h     //交换
$ U# x! p3 m; o8 B+ E  D! n     for (size_t i=0;i<vItem.size();i++)
, S' ~  j# z8 D& R2 s' l4 x" I+ E     {2 W7 A" s3 X+ p8 u1 O2 e1 Y! H6 v( K
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
7 D8 J! _, f( \% Y# E8 A( t      pInvSort->Add(vItem.nIndex);+ G) e2 }! Y: u6 J' {
     }# r( ]0 n+ w4 {6 M: r
     BYTE nDestPos = 0;& d7 R+ v' B7 H5 S
     for (int i=0;i<MAX_INVENTORY;i++)
8 r- {/ B. O3 e+ d8 H( M     {
/ v' F5 x  n3 h) G5 s      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
- A& Y& u) {3 L( r, o& n2 t! s      if (pItemElem)! P5 O6 r5 U) B; h2 B
      {; m, [$ E8 x6 n0 N
       if (IsUsingItem(pItemElem))7 ^" d+ W" q2 T# z- C) r
       {
8 u& G! y! _$ F7 F$ `4 Z6 C6 u0 v        //这个位置无法放8 X& C. X3 v" T" R
        nDestPos++;% h; v' I- X0 h5 w% A  x; r  G
       }
9 x# f5 Y, e) r0 f      }, y$ M/ t" m* R
      BYTE nSrc = pInvSort->GetItemSrc(i);
* G0 l6 B5 [# ~* K0 [      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
" l& V9 g2 k* W; G/ a      if (pItemElem)1 K( z( R0 s9 |& A% G0 w4 n
      {9 Z9 ]. g! ]! E
       if (IsUsingItem(pItemElem))& D( g& t2 U" X
       {
& ?- `- d' V7 R9 F! r3 I& X( i# {        //这个道具无法移动,跳过
- m# f, x2 K  Z        continue;7 t# k& x; z5 _; D% C
       }5 I/ a% U5 W, n. A% V9 \/ s
      }else{
6 ^7 f  J* X* g       //空位置 不用动. ^" E7 P( C9 |" l  Q( e6 C! [
       continue;: s# m# a; @$ _5 _3 P1 _
      }/ U0 Y/ X( [; S7 ]8 o) N0 h
      //////////////////////////////////////////////////////////////////////////, m% {& b+ W2 V% s  H/ \
      //开始移动' R, h4 u. C0 ^8 x; G
      if (nSrc == nDestPos)$ ^7 s8 [3 H0 _4 J1 a
      {. w2 j! @& K$ @% r9 O' B0 h
       //原地不动
1 Q- s* R/ A' h       nDestPos++;
  z* _0 _; n8 D+ u, @' o       continue;( ?8 }7 \+ P! e( u8 j) s* I. X$ G$ y3 K
      }
2 ~; p8 A8 o! ]      pInvSort->MoveItem(i,nDestPos);3 A8 a& B6 v$ P3 W! F1 X7 u
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
0 ]$ d8 d: v/ M+ c4 b      Sleep(5);& t; a3 r  X5 j6 B
      //Error("移动 - %d->%d",nSrc,nDestPos);" M& ?) w. P6 l, I8 X
      nDestPos++;  {1 {5 Y1 L" |6 ~
     }( L% Q7 q9 V3 t4 c1 h
     //取第一个元素的信息$ M. \/ y2 g) Q7 `9 ~. D* B
     /** j2 s, j1 T/ Y
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
& |. |$ w- b/ @# _* H8 r     {& ^' c5 x/ k$ o* u
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);# l8 \: u& w+ k, B) H
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
" ^+ I# O" d7 W9 r7 u1 A     }/ h" T6 i( V; O4 o/ t" X
     */6 U$ R% C+ H+ X" s% w
    //////////////////////////////////////////////////////////////////////////
3 E- ~# S* m, _- \( v7 _8 J; R    break;
8 `; Y; u- J1 t: P: b  \   }
  G: z0 J8 Z( a& ?8 ^- C' I  }
8 o5 Q% P7 t& D/ a  ~}
/ E8 N& U( p. Q# ]) L- um_wndMenu.SetVisible(FALSE);
* @0 ]! t  }8 X6 \/ b& w) H: A6 S* `+ V( @
--------------------------------------------------------------------------------------------------------
7 k3 R+ z( M/ E" a8 h搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)# O$ j2 a* \2 ]6 O2 ]( O* H- B
{
8 \3 a# {" W4 ^# HBaseMouseCursor();$ N" Z& Y# ~  I) ~  V# l3 U
}
3 l8 `3 T/ ^# l2 W' \9 {- K在其下添加:
, S4 E, v9 M- q/ j  Tvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)8 W+ \: ~: a7 |$ c0 w* w
{* d9 ]7 `# B5 r( f- \- V
m_wndMenu.DeleteAllMenu();
8 A; o1 L! Y1 J0 C6 A! Qm_wndMenu.CreateMenu(this);0 l0 Q9 i7 J  S: v7 Z" L7 |
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
5 `2 Y9 U1 t  G
$ J% b. _2 H2 Z7 r  o2 t+ ?6 sif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 v9 d" p  T8 q" z1 H1 U) _{
5 M, u( W6 W+ |+ T8 B  //P以上级别才可以删除所有道具- Y' R9 r  o1 P/ J( K9 u
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
6 Y* w& d+ F+ k, i0 ^}
8 ]+ e; |9 T1 k6 R# O8 ?7 t; hm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
# k' ~. y+ y- z) O& \m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );5 j+ m8 K) f* v* h% x7 p% E' d1 w
m_wndMenu.SetFocus();5 A, @; x. H+ a. I2 A8 }. v+ h
}/ m8 x! |& s. y' P3 v$ n4 {% V
------------------------------------------------------------------------------------------------------------
: z* U' H9 ?5 {% d2 D9 C6 }*************************
% C; P( {; O, LWndField.h文件
, C2 }- f% P( \2 `* z*************************( J2 P% s7 Q2 B
搜索:BOOL m_bReport;
4 D' f/ [2 }6 E* G( Y# r其后添加:' X2 u. w+ }1 w3 W
CWndMenu m_wndMenu;, y: U+ I9 D; P& K# N& g+ j4 y
搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);: J$ U! c/ A& I. B
其后添加:9 j6 L$ K8 w$ u$ @. u0 s7 _
virtual void OnRButtonUp(UINT nFlags, CPoint point);# |; t# q, y! d% C' }! ^
$ o& P3 o) A! s& y- s

7 m; r( }/ H0 K" H/ \4 e  [

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-23 20:47 , Processed in 0.061364 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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