飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
) ?  O1 d! H3 h9 y搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! i0 o. G3 E3 \
! m, n% v+ h: z3 B1 y
struct sItem6 T$ A1 ]3 o$ |: I7 `; W6 h
{( r/ T' t+ u$ x0 Y* U- A
DWORD dwId;3 z6 P  k6 r8 ~/ R- K
DWORD dwKind2;
1 V5 X. v% j& dDWORD dwItemId;
( J; B  A& h! E4 q# K- e& MBYTE nIndex;
7 s, E1 z' L7 r- Y2 ]sItem(){
' K/ T- b. ]4 j! e3 d/ A: Y4 h# _  dwId = dwKind2 = dwItemId = nIndex = 0;
5 @- c/ b/ b0 t: u0 B}
5 k; k* m* ]) J5 fbool operator < (const sItem p2)! v# i, i9 M) D* J: }, i- x6 p6 \9 t# V, P
{3 o4 u9 Z" o1 o" M) J, r; u) f
  if (dwKind2 == p2.dwKind2)
9 d! q. }* t$ @8 I9 B  {
% F* d2 {. T8 p( }6 T+ e; E# @   return dwItemId < p2.dwItemId;
: d0 o& g: r$ F3 [! {7 n* n& y9 O/ ?, Z  }else{/ J/ K. \1 z" H5 m. U
   return dwKind2 < p2.dwKind2;
' I! Z+ |6 v" M% K$ W' Y  }
4 ]' y8 t4 B& }1 V( @}
1 \  G$ I7 t( t. \0 u& N};
+ ?9 p& ~$ O* N; n0 J* S; Mclass CInventorySort
9 j$ e( q, ^7 b! U0 x/ S{4 \! |, q# o9 a& B
public:
" R2 \" |. Y  B# R9 zCInventorySort()
8 `; R/ b9 r7 Y; H$ O{
9 T2 l& `5 m" W& c+ s; X, F% w- {  m_dwPos = 0;
* p* [& l& v2 I! \6 I$ S}
7 E- ?* j9 E2 W0 @; D+ T~CInventorySort(){}; `  T* Y0 T' X, p! t2 G
private:2 z5 V% d; z+ o' {- v$ F
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
! a) ]. V, w8 }, f( PDWORD m_dwPos;
8 k, H) t( S- b) h7 N' ipublic:
& d# f- o) M. ~' v: T, Evoid Add(BYTE nIndex)
! K* O, ~, E; p% `{
: I3 u, U% \+ l6 m  if (m_dwPos >= MAX_INVENTORY)
3 k, {7 g4 K6 n+ U; u  {
, h6 m6 B3 N, {! s   return;
5 [7 {. ^; _1 O% p$ F! z! D9 `. ~  }2 U, |, C. E+ T( T$ U
  m_Item[m_dwPos].nIndex = nIndex;
3 K7 I- x8 D2 F  m_Item[m_dwPos].dwId = m_dwPos;, e) A& G  c) A9 C
  m_dwPos++;* L+ {9 q5 w5 Y* V
}6 X( H8 T& u% J& z
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
/ [: d' R: n' ]{1 e5 [$ L1 B! R8 Z9 o
  for (int i=0;i<MAX_INVENTORY;i++)
4 b, l& J. V. v) t  {$ P. M/ t; Q+ D3 ?- N* ?
   if (m_Item.dwId == dwId)
5 d6 @8 N0 b3 }2 m1 Q1 M( W. v   {: N( i8 e  Q. t. ]* r7 t! H* S) e
    return m_Item.nIndex;
! x( P# E' y+ R. y1 V( C   }8 P5 j7 [, s( T0 H
  }6 O8 Y% H' o: b( X
  return 255;
0 M( u$ i9 M6 {0 r; q) z}
& Q/ }: g0 L/ s$ |void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置8 s0 N1 a! u# q2 y' D8 }" T
{4 E3 H6 H! l) P8 M7 Y: }; W
  BYTE nTmp = 0;7 L/ p& `+ u- F* l# {
  bool bDest = false,bSrc = false;* L6 K! q; _. z2 f
  for (int i=0;i<MAX_INVENTORY;i++)( w' T: D6 t# z! ?5 w+ f7 F0 B
  {2 l, Z+ q- T7 H5 x+ x& m" k* B
   if (dwSrcId == m_Item.dwId)
6 N% d; f8 k. @: H   {$ g; m/ B6 `- V* d" }( C1 V
    //id相等 则 改变对应的dest和src- g! Z) O  l% Q" P# {
    nTmp = m_Item.nIndex;
& X. t4 t5 Y$ A( A% X+ q    m_Item.nIndex = dest;: t( S, B4 d# o: ?8 k/ h* C
   }1 x+ E% ~8 A4 n4 n
  }
+ J* u9 g, Q; n6 y1 v  //临时数据保存完毕,交换开始
& x' E! ~9 W8 W  for (int i=0;i<MAX_INVENTORY;i++)$ G' b: ?, A' S9 `9 {
  {
) Z' r- ^: ~$ s   if (dest == m_Item.nIndex)/ g$ E4 B, @5 {9 ]! k, k
   {- n. g0 Z/ N8 J/ [4 T1 Z$ z" u
    //id相等 则 改变对应的dest和src+ M9 c" l2 ~$ @  v2 w- _( C: W* p
    m_Item.nIndex = nTmp;; s' }8 s; \5 a  v/ ^; u
   }
6 M+ y# W6 o" T/ ]0 N  }( W; e/ P0 j5 N7 K; @+ h  P
}1 ?' Z7 I0 {% A- z
};% N$ |1 ^. _( v
-------------------------------------------------------------------------/ g5 G, m, v: O; @# }% u
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )  S9 g, F: u" Q. \6 |1 N4 g# j( N
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
0 o  V3 U# @" n; d; O3 N, z, o紧靠其上添加:2 H6 q/ B4 @, D
if( pWndBase == &m_wndMenu )1 X* \6 s) F! `$ O' c
{
2 M9 ~7 O2 a8 G  switch( nID )* E/ ?7 R* [5 R- B/ y
  {
* T0 Q; n* \/ a% t  case 2:# p# t+ ^' u, H- y0 s; d" Z$ p
   {
6 G; t4 t3 x+ i1 E    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
1 L  e( K- L. ^% K1 z    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))- v! G( V" B8 e3 N
    {
7 s3 Y0 M, |7 |" m" ]/ v5 k     break;
& y8 k  \6 K9 @! S: J/ F    }& t6 J/ n; r% Y/ U1 ~* g
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++); [  L4 d% T7 G& s( s. s$ M
    {
6 s5 {/ D( K$ q) \! x4 H8 R% ^     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);& a/ Y5 j! e6 D0 l
     if( !pItemElem )) X' g: o5 l# W/ Z2 k# I
      continue;- ]6 }. D4 q- X" I8 z
     if(pItemElem->GetExtra() > 0)- `3 M4 y2 w2 n
      continue;
! A- D+ D+ w+ P! Z4 i     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 4 a; {/ V0 r' C* C
      continue;7 o! m- y4 M$ }, O( T9 S( Y/ N
     if( g_pPlayer->IsUsing( pItemElem ) )
# Z, w" f7 J& N& S* N5 R2 c      continue;, O2 m3 H2 q* f! U5 U
     if( pItemElem->IsUndestructable() == TRUE )
3 g) B! b& ^' G  z% u     {
' ]: C' {* \- a, J' Z! ~      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );6 M7 N/ W% }2 [! o$ r7 {9 }
      continue;* x  g1 S- f6 H8 Y! i4 |, @: E
     }: B/ V% q3 v; {1 \- N
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
9 \0 |- H1 q/ M1 ^2 G1 v$ A- Z    }
% |  U1 N; [5 G" L    break;
: T9 n; R1 A+ p1 {. |   }5 J" a) B9 T5 Q" V& B- I' O
  case 1:% U$ d1 Q# @0 W1 \2 k" h: c
   {
2 g, I5 z; V" u* \, [2 z    //整理背包* l& [! W# |- h1 l& k/ a
    //////////////////////////////////////////////////////////////////////////
, h% l6 w5 `5 N. O8 U5 R" k( d' Q/ F    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
( ]! s; r' \! j: A; P* L! X5 I3 t    //////////////////////////////////////////////////////////////////////////. `8 R: f3 J: I) i
    //////////////////////////////////////////////////////////////////////////0 [7 B4 m4 O( K% o, V& D
    CInventorySort* pInvSort = new CInventorySort;: b& D+ F0 E7 Y5 r. g0 o
    vector <sItem> vItem;/ t/ P9 `: P( m. X  [: s
    vItem.resize(MAX_INVENTORY);//初始化大小3 a  w5 d1 p8 i4 K0 G4 y
     //////////////////////////////////////////////////////////////////////////
. J2 S+ |3 ?, o: e6 ^1 Z9 p     //填充数据
3 a2 }0 b. Y2 Y* n     for (int i=0;i<MAX_INVENTORY;i++)6 h/ T6 v! G  S. A2 o, i2 _9 t
     {; N2 E. m  E+ j$ z  T/ ?
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 ^! B% Y6 Y" N+ ^+ f/ D: D      if (!pItemElem)7 g5 K2 X/ G1 B& ^' d+ f. `
      {
, I, c& y* i/ c       vItem.dwKind2 = 0xffffffff;
- N! H9 W( }* ~& _  C6 z- ]       vItem.dwItemId = 0xffffffff;1 e" _4 {. {' P
       vItem.nIndex = i;
" C  }5 T7 N1 I( H( @8 D; h1 [5 V      }else {; t: C  ~* H; Q6 S
       ItemProp* pProp = pItemElem->GetProp();9 c0 h" D, `7 z
       vItem.dwKind2 = pProp->dwItemKind2;
; S+ ~# F' m% O4 K       vItem.dwItemId = pItemElem->m_dwItemId;
  f) w" a1 R0 d       vItem.nIndex = i;( K( Z% x% S4 v0 ], B. P8 d
      }7 ?5 {2 }4 t0 x6 C/ Q. O. r
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
5 S+ s$ T3 ~' t5 W! ^! }" P5 W7 L2 I     }4 W! E4 ?2 F3 q
     //////////////////////////////////////////////////////////////////////////% v7 ^; J9 l7 F+ T, t2 x
     sort(vItem.begin(),vItem.end());//排序
6 `- W2 V7 x1 z* ?% u6 X$ ~0 A! b, h9 B     //////////////////////////////////////////////////////////////////////////. u# f4 G7 M" v; v4 i
     //交换/ U: v$ g5 M) A2 ?8 q
     for (size_t i=0;i<vItem.size();i++)
' Z9 K$ _) z' U     {
7 z) Y' }2 K" n0 W' u      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ Q; @6 l' T7 q3 [
      pInvSort->Add(vItem.nIndex);; s# k( I  @9 {7 E
     }1 a8 a! u9 Q9 ?6 T6 s8 [5 m/ q
     BYTE nDestPos = 0;
4 x9 h4 f1 S4 I5 o8 i' i9 r     for (int i=0;i<MAX_INVENTORY;i++)
& v+ X6 v- {  }7 F9 g' J     {+ H2 H, T7 U" H* q
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);* k! |8 t0 w5 ]9 g" q% N
      if (pItemElem)
. H8 D+ P7 Q5 K+ B  s9 b; E      {2 l7 \$ ?2 s2 C) E% f2 e7 H
       if (IsUsingItem(pItemElem))
" Y1 J# ^" [! h& A$ v2 Q5 ~+ t2 R       {* q6 V3 w" r; C& E3 V* b! z- G
        //这个位置无法放
3 G5 M" S& F8 `        nDestPos++;0 a  _9 a$ k! s7 D" J( v
       }
' l/ J: a; @' Q$ |      }8 s8 F( @, J1 w. a( e0 Q
      BYTE nSrc = pInvSort->GetItemSrc(i);. s! _) u# z+ g  t! a, B2 H' R
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
* h! G# c" ]$ @# [5 _      if (pItemElem)
8 ^4 t4 O9 T6 D( {3 F4 T& o3 d5 e4 Q( [      {
3 \- A0 G  s- M; W       if (IsUsingItem(pItemElem))
+ }$ Y9 e% I) K       {
2 m  g2 q1 w) I5 w        //这个道具无法移动,跳过3 n! w! a: A4 M5 D/ m$ N9 o2 P' E
        continue;9 p" Q1 f1 S* Q1 E' q0 Y: Z
       }* H- V' k9 {9 Q/ h8 ^' b1 K$ ^
      }else{' T6 Y3 a  u1 D3 k
       //空位置 不用动
6 {1 n3 H% j3 L$ M2 `       continue;6 J4 u/ R0 ]4 L" y+ L- c7 ?, G
      }9 y0 |6 g+ o* t8 V4 h' ]; K
      //////////////////////////////////////////////////////////////////////////
$ r* ~  m3 z8 N. P      //开始移动
' W; Z" N$ }5 ]6 z3 ?! _4 ]      if (nSrc == nDestPos)
" H9 H0 c) j& J* S7 v      {
$ E7 L8 Q, L0 R5 i7 i$ Y4 i9 z" H       //原地不动
% U' H' l2 u: v       nDestPos++;
  g& \* P% e& i2 Y$ N" M       continue;! ]# h  U/ ^0 o
      }3 n; z; T0 B8 f8 T2 F
      pInvSort->MoveItem(i,nDestPos);
% |, `" s$ b$ Q1 Z% l& d      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
& {4 w3 q( g+ ~      Sleep(5);0 s/ |/ e7 G! j/ L5 U, ?
      //Error("移动 - %d->%d",nSrc,nDestPos);
2 L4 P% ]2 z5 H# `      nDestPos++;$ z/ e+ x; ]1 U) l, b
     }1 ~& w$ S2 {$ N) G& Y$ s/ ]+ y
     //取第一个元素的信息2 e& A" Q6 @& q
     /*
; u! [; p) e& D7 D9 ~5 U     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)+ _* K4 H. F# E6 l3 P( _
     {
4 O9 o# ]' ]: I8 y5 s& D* ]      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
; ?7 }1 }1 y. x. z# w      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
1 ^7 X9 F6 t4 D1 t1 J     }' K9 O( T2 Q2 a" K
     */
9 v% I/ F  Y5 {3 z! f4 E  v    //////////////////////////////////////////////////////////////////////////
4 K- R$ S4 G( p9 w7 Q0 b    break;
; V  f6 Z  M' w7 v' [; O' o6 _   }* p* P* o* O% c) v6 c; v
  }
1 N3 N. E& _5 G, a$ p5 |% D  d}
/ t+ i4 @8 b& m7 Km_wndMenu.SetVisible(FALSE);
! f5 Y9 j( z4 u
8 ~9 x4 f' T* V7 d% F; P9 c--------------------------------------------------------------------------------------------------------9 ~! x! S0 [9 Y
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point): x3 M! N' _. i2 y7 o( l
{
! T8 d9 q; E+ G. x0 }( w" `% w8 @BaseMouseCursor();: \+ ~2 H9 r! o3 N; w
}
1 k5 `0 S  N$ Y0 I- ?  P5 ?5 |在其下添加:% {4 l: u9 m+ s1 E
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
& V% K! R; u5 \{
8 L- i" V: `  c2 im_wndMenu.DeleteAllMenu();3 P/ T6 y4 ^+ g* b
m_wndMenu.CreateMenu(this);
; {4 N9 X8 U* `m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");8 h+ K2 E$ U" Q& g4 @/ m/ G1 r
3 p* o; X5 t. r
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
: X. y' |) |- \( r$ u- X0 z{7 J! T- h; z3 X8 T1 p- E1 k; |+ X
  //P以上级别才可以删除所有道具! U' L! v2 @0 l  i) |) H8 v6 e3 m
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");5 U& `$ I; L& k1 v4 Q' A
}
7 f! X. P3 l: v4 Rm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
  k: W( C) ?3 h2 ^- F6 `m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );: h* {+ V4 i6 S) s, Y
m_wndMenu.SetFocus();
: W7 G1 e& m7 e; }2 o}
' X2 N" i6 r, J3 X9 R6 _, G------------------------------------------------------------------------------------------------------------9 q( n9 G# k" v  s
*************************# L/ U# ^# m" y/ N3 i
WndField.h文件5 p- A8 a; o% l$ x5 u8 Y" l" R* M
*************************& Z& o: a$ r6 Z. l; m
搜索:BOOL m_bReport;8 ?3 z9 l, C) K7 G: W
其后添加:
* A3 b1 `1 b" G5 r9 m# dCWndMenu m_wndMenu;
# A# c4 D* `  g1 g4 Q搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);; w0 d6 Z/ i2 N0 {# A
其后添加:
. U; D8 y5 z2 k* m) J6 [9 q+ wvirtual void OnRButtonUp(UINT nFlags, CPoint point);" \8 p$ p) A$ O
/ p7 d( a9 F  _/ z! ^

( ?- a! P5 R, T! O) F

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-22 08:31 , Processed in 0.074020 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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