飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件1 @+ i8 {  r7 Z8 P1 |, ?9 v
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
2 e3 s& O2 |" U5 ~5 \- \2 P8 m
% y, z! q  \  y! P0 c! s( Z# f) qstruct sItem; t4 o& R3 j' u2 ~4 Q
{
" }- j) i  N) [( cDWORD dwId;
9 I* ^5 }3 ~& @DWORD dwKind2;
! C6 z. c) k, Y! l' M/ ]DWORD dwItemId;
4 \% }! N3 K, G/ Y' E: A5 dBYTE nIndex;) w) X' a1 Z" c& ?7 \: A
sItem(){$ d7 O4 c9 t' C  y  N
  dwId = dwKind2 = dwItemId = nIndex = 0;5 Q- T! c2 @" N4 _; \, D# N
}
% c% B9 U1 p7 ]1 z- h) z( }bool operator < (const sItem p2)+ o+ t% O- ~$ i8 S
{
; y+ n% ]( ~. w  if (dwKind2 == p2.dwKind2)
' |3 z; I' d& S) z5 |  {
9 J) Q. n5 i/ f+ a' X: u" i   return dwItemId < p2.dwItemId;- m0 @$ g6 E4 q
  }else{
" o& e3 n/ j) t3 ~9 G; b. B   return dwKind2 < p2.dwKind2;. D5 b& r* Q2 K6 C& k4 K, o$ K* x) d
  }9 }# m" |$ E: ?* T# D) n8 S
}% Y2 X- R2 j% r/ |
};6 t! c/ a, w" o, }6 Q
class CInventorySort, X+ u! a) g. e! H6 Q8 M
{/ l) n8 Y2 J2 f$ z- p
public:
3 z4 u2 J  j5 PCInventorySort()
' [& Q' i+ J4 D) r, C: k" n{( i: j7 P+ B; C$ l$ X
  m_dwPos = 0;# i  N# s& {- _) u
}; t2 y! L' R# n4 v
~CInventorySort(){}/ o, d! v0 w* l
private:! N( q5 E. ]) f' ^0 S, N
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
. D" ^' I% S( tDWORD m_dwPos;( _/ l0 y* E$ X5 T
public:4 G5 h! m" m7 S5 x5 ?' M( ~" ]
void Add(BYTE nIndex)
0 r6 F) d# [% X% w+ |{; f+ I0 I9 C5 |6 I
  if (m_dwPos >= MAX_INVENTORY)
, L/ S/ J/ K* V+ F4 r" ]  {  a( u7 ^# h1 w5 s: `8 H4 L" O+ ~
   return;
- C" ]/ V6 A- G' e3 \2 q1 }  }# P3 q2 ^+ }9 @$ N8 N
  m_Item[m_dwPos].nIndex = nIndex;
2 Q% T+ W/ S2 L4 x  X  m_Item[m_dwPos].dwId = m_dwPos;* i9 Z& w0 t, a) o& h+ C
  m_dwPos++;
9 D9 j, b0 ^" o+ W% R}' i; F- U4 q! Z+ y" s) P, S, t# S
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列! C9 o4 |! B, D( k% K
{
0 ]# V  S( |) w6 e" k- O2 L$ D* Z2 P  for (int i=0;i<MAX_INVENTORY;i++)
' @$ ~9 L5 h: F4 C1 P4 t1 `  {
% ]. _: D% @$ s1 n$ e3 o   if (m_Item.dwId == dwId)" b& w( a" C: h* D# s" M  Y+ R
   {
1 ]1 S! _" d: f3 Q. L% m% w    return m_Item.nIndex;  s  S# J, m1 O8 g) w5 A9 i8 L5 P
   }
8 x9 E) |* J6 e  q# g" U8 \  }# I9 Y  u& n) y; e) R7 i6 c' V3 M
  return 255;* v# `& f# D% A
}
' ]4 n; e( K# [6 w: @2 i6 z9 b' j; xvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置) {: I+ [0 s. d
{
  x) k4 ~3 n3 j0 G) |) Y+ b6 {3 }; S  BYTE nTmp = 0;
. h; A/ ]- j0 n& Z/ F  bool bDest = false,bSrc = false;
3 U) `4 c6 V$ p0 X! Y7 \0 n; U1 L; O' P  for (int i=0;i<MAX_INVENTORY;i++)2 `. m2 w$ L8 e% |
  {* H6 Z% E1 c$ V) w+ @, ~+ \
   if (dwSrcId == m_Item.dwId)
4 N* u* E% R/ t! B. L  [& W2 T  z   {. C, l8 C1 D8 R; u8 k, v4 e! \: u' H& p
    //id相等 则 改变对应的dest和src
! ~" {& r' r6 e2 {    nTmp = m_Item.nIndex;
" Y# M' ^, I. z$ O; q9 t    m_Item.nIndex = dest;+ [$ |8 c- N, H$ N2 H
   }- q6 y# c, }( [7 y2 q. e. n
  }1 t( k, |7 m5 D( o( A3 X
  //临时数据保存完毕,交换开始
/ j) X( D) Y4 W0 r9 I0 o  for (int i=0;i<MAX_INVENTORY;i++)
+ u. S) K0 C+ _7 T4 C  {
- F) M2 V7 C; \; p" a   if (dest == m_Item.nIndex)4 |( C; `  y' i' k! X8 ?
   {
$ x2 I3 L' d9 _' {! V( j2 m    //id相等 则 改变对应的dest和src  X" F) x5 e0 c8 a8 V& C
    m_Item.nIndex = nTmp;0 J. d; i* {; ^
   }
8 h1 Z& v$ g) u: B: V$ D5 K) q9 z, z  }
4 i# ?  z3 E4 B}
! O0 t" e4 \' j# y/ T};
! y" ]9 d3 L: z-------------------------------------------------------------------------
; |+ @! G( U% s1 s; M5 {依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )! h# q8 \6 _) Z6 g% p) O% L
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);& E1 U7 U. _+ g1 X% F7 ]! ~; `
紧靠其上添加:
3 o' \3 \0 L- p; O$ s0 nif( pWndBase == &m_wndMenu )1 v* G) W0 j0 N6 T0 L, x% Q& B2 P
{4 j& ~" ~3 ~; f
  switch( nID )
6 A' ]! W6 n. z5 a- \  {; A/ s2 H6 r5 \  e& a9 l2 Z
  case 2:( a6 p% {; o: s8 R
   {5 m) H% f4 l, g1 H) ?1 S; H, M
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);1 @$ t/ p5 G/ ]2 m
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
( ~- v* O' [! s  J# U    {
- t6 p0 V" Y, i- [1 z     break;3 _/ C. e: Z, ^. u
    }
& ]" E. o7 v. ^0 L* G. ^, o    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)& F. P$ E" \# Q, A( N) o; f: ^
    {7 _6 G  v! R( A* w3 D
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);0 P  [1 J& b* _% ]
     if( !pItemElem )# [4 ?% {- m4 f9 ^+ E7 z+ \
      continue;! o. _  R% B! M+ l7 u
     if(pItemElem->GetExtra() > 0)6 e1 V7 p7 C( I1 O* Z4 g
      continue;! y# |* b" y3 e$ Z3 T( h% g
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
  H- A( A5 Z! \2 J      continue;
5 x4 [* P5 N: Z. l     if( g_pPlayer->IsUsing( pItemElem ) )
( e) {% s$ z6 c+ h      continue;
' v7 U0 P+ Z$ Z# @0 F3 x) M$ I% e# _     if( pItemElem->IsUndestructable() == TRUE )1 l. ]% A7 @$ ]7 r& v3 \+ u( h" I
     {' t$ S, F/ f6 c8 g/ ]
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
) |( W; |5 g/ W" k/ s/ x      continue;, ^( K, R6 o7 |+ H, j) I
     }
. N4 K, W7 J' j' s9 E     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);5 }$ D7 ]+ r3 r9 B# X: Q9 |! S
    }( O% ]# G, b7 K3 T( q2 _$ F5 Q: s
    break;4 |4 R: h$ N) j6 p
   }% x  ?2 }$ y. c: e7 [& a
  case 1:6 F8 b; P8 g5 L! R+ Z& B
   {; ^$ r# w- l1 \# e
    //整理背包' t6 Z! [7 [+ k7 ^9 L% w
    //////////////////////////////////////////////////////////////////////////
' Q% {% t6 S6 t9 w  E9 H    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
8 B; D  X9 j  J0 E    //////////////////////////////////////////////////////////////////////////7 q- f9 A8 {4 }. v) ]
    //////////////////////////////////////////////////////////////////////////' z9 x, M, t- R- b" Y- F$ S
    CInventorySort* pInvSort = new CInventorySort;
2 Q8 B* I9 l8 W5 b4 D    vector <sItem> vItem;
* c0 v& g; u6 D7 B1 o8 H    vItem.resize(MAX_INVENTORY);//初始化大小$ X3 ]& K/ z  @2 b% H; k) q# d9 }4 l/ Q
     //////////////////////////////////////////////////////////////////////////
. E4 F1 {4 k2 O6 F: H     //填充数据
$ A  r8 b6 n# T5 r* Q5 a) {0 s- N     for (int i=0;i<MAX_INVENTORY;i++)* h: r% c, @' L) G5 E2 [! ]
     {
) t9 g/ S0 Y* ]# I5 c4 r3 Z! k3 U      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
1 c5 X# S* C) g) t      if (!pItemElem)
& }3 N, ~: e! M      {0 J, x. d& l* [# u' ?
       vItem.dwKind2 = 0xffffffff;% V2 G* C' r9 C; b2 W
       vItem.dwItemId = 0xffffffff;8 O* l( h. Q: F% y/ E' h! S
       vItem.nIndex = i;
7 ^& z5 f" V; g2 @      }else {
. W0 G) I) h' k% Z+ M       ItemProp* pProp = pItemElem->GetProp();
5 s' [) s$ _5 c/ y) N       vItem.dwKind2 = pProp->dwItemKind2;) l% o- y2 O0 j6 e# z
       vItem.dwItemId = pItemElem->m_dwItemId;5 a* v5 L+ |" @' X
       vItem.nIndex = i;
2 e& R% l2 m% t7 B( Z/ K5 s      }
) d  O7 \" P& w, s( Y% `- Q      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
/ F; k2 m' M' V8 t0 A     }
. g/ e9 H: @4 }; S; k1 q     /////////////////////////////////////////////////////////////////////////// p4 J/ b  K+ \% q" b. e
     sort(vItem.begin(),vItem.end());//排序  `) g6 a  q2 ?3 v, J. B5 S6 C3 k
     //////////////////////////////////////////////////////////////////////////; K" F4 I9 f: F" l
     //交换
, S/ r# z' l6 H$ S1 X2 \" b     for (size_t i=0;i<vItem.size();i++)( R- j# B: C. [  K2 J/ V
     {
" _5 ]5 M3 d( u: i% ^9 \2 i5 U      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
) M# Q2 x1 x% r. B      pInvSort->Add(vItem.nIndex);
' m( Y, n7 h8 `1 |     }( U" d& h4 z$ T2 `1 D
     BYTE nDestPos = 0;! G8 K- T$ g3 P8 Y
     for (int i=0;i<MAX_INVENTORY;i++): e0 W: U+ T6 E% Z" F
     {
7 G( O0 i' _9 x) f) F      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
( B; \, d$ J! Z% E: U( |9 r# R      if (pItemElem)) Y2 p; T4 ~7 k- v: k' ~& ?/ q
      {: S0 _% x& ?# G; Q
       if (IsUsingItem(pItemElem)), o3 K0 a& `! y/ z; U
       {
( r8 X4 j5 J# y# h  L        //这个位置无法放0 h6 r' t; i6 K" p3 T' k
        nDestPos++;
) g8 v; I( O6 {( G( o       }3 B# c8 ?- r" e1 v; S, f1 j( m
      }
' G$ l8 r: ^& G( [$ N7 B' g      BYTE nSrc = pInvSort->GetItemSrc(i);
7 X5 l! v$ v+ x; @( B: A      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);% ~% K" q- R& m- G5 Y, F
      if (pItemElem)
5 h# d0 Y0 Q) ~      {9 Y( h8 |  `0 b1 n! p
       if (IsUsingItem(pItemElem))
9 Z+ B3 N7 S+ T) R! B. \       {0 D: D6 L) U4 N- g" m+ F5 _
        //这个道具无法移动,跳过
4 d& B# [& }/ g0 O6 I  v        continue;
2 V  @' R% R* Z5 E; u       }% V9 O+ l' M* Z, O; ]
      }else{! p2 g- E8 w2 V7 I7 I/ d" k
       //空位置 不用动
$ ~) G3 c$ V. C$ b       continue;
0 G- w) E; z8 \* R      }
7 x9 c* X4 U4 I$ N( ^, [      //////////////////////////////////////////////////////////////////////////$ G" ~1 c( ]. k( w) M
      //开始移动
' k# z8 z& R: [$ a+ O) e, B3 i4 g      if (nSrc == nDestPos)
1 t. D. }4 T; ?6 M" p      {
: w" P2 _! S# N) [9 S       //原地不动" }# e3 p9 L1 y9 X# v+ e( F- p
       nDestPos++;
1 }+ O) z. N9 \. A$ p       continue;) }- w0 n+ O5 J
      }: O' q& D0 _4 F- v
      pInvSort->MoveItem(i,nDestPos);5 X7 o; E# n8 A* V6 W+ }
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
& K1 i  u1 q, l! K* T" d+ L      Sleep(5);
! F: V" T; \$ C- [0 J( i. x/ x      //Error("移动 - %d->%d",nSrc,nDestPos);
8 m" d2 W2 c. i5 T3 n4 N      nDestPos++;
: X" }0 d( Y* E1 r. O9 N     }0 Z+ P6 o* A3 p# c
     //取第一个元素的信息
9 _( {2 \$ ]. N/ p9 j) q     /*
. q8 n8 u% T& C! C! J: f     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)" l+ W8 f0 g. E' s
     {3 C% p5 {- I6 i* e1 l) h
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
! m  D; y0 q% w- F9 g      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
: A7 t9 T' `( \+ n     }
+ f# K/ p9 ~- _7 x- X* L- W+ O     */
8 f8 }* ?2 p: R7 D    //////////////////////////////////////////////////////////////////////////
# p/ }& ~& ]" _' t9 _    break;' v& a7 ^, D' ?  V* m/ Q( U
   }/ y+ H  k; Z" Z5 r7 D! _
  }
* j! E! N9 q2 K: p/ u4 z1 L9 F6 h- W}
9 Q( o# w  f0 V- ~) c- Jm_wndMenu.SetVisible(FALSE);
; J, r5 B4 s# l1 ]5 ?% J
  G7 m0 ^5 S& a% H4 d--------------------------------------------------------------------------------------------------------3 G* @: ]# Y0 C2 [/ X; c: J; Y
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
$ d. a3 H4 w5 l7 `. a, V/ U{
) [' W* j# l$ ZBaseMouseCursor();
( }. `( V! }# S$ [}
, B# L( u3 s' i! M- ~4 d0 R在其下添加:4 k, s( l! h* M9 ?4 y  n6 e
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)) R4 D& w# r, l6 C/ }& F
{
8 Y+ m2 V; h6 T* s$ Nm_wndMenu.DeleteAllMenu();4 W4 p8 l- A% O
m_wndMenu.CreateMenu(this);
% g" d+ |: z9 G! F1 n! O% D( Y, Tm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
5 g- M) ]( }; P; @% T. }
2 Z; ?; s! V9 \) l: h4 T& C0 a0 o; iif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
5 s; h! N' U, K! F{
; {$ x! T; z% V7 ^; r, J# ^0 ~# {9 H  //P以上级别才可以删除所有道具
! V& b0 j  _5 o  H! K  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
; z5 B: B$ y4 U5 ^$ A" e! Y}
% k6 @  i' ~' P" Lm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );7 V* x2 j2 e; l+ Y2 ?, s3 C) w
m_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
' V0 T& {& H( Y- t" Fm_wndMenu.SetFocus();+ z- ]' N' C1 v: z$ p  n
}/ X4 _2 l$ D6 L  r4 W  F  s: I
------------------------------------------------------------------------------------------------------------6 v2 k* Q& k5 ^. a, F, [
*************************/ ?+ t' m" i% O, K" g
WndField.h文件
# b; F1 g# {5 E: u6 @*************************
, w3 ]. z0 Q0 d' k搜索:BOOL m_bReport;9 T: E5 ?3 _6 w% I, m5 i
其后添加:" g% J9 y2 e0 `5 T: S& G
CWndMenu m_wndMenu;
9 m+ U$ X& X' C( Z9 P$ u! M3 E搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
: d  F' h; d) Y其后添加:* V) g; M7 H6 z; u
virtual void OnRButtonUp(UINT nFlags, CPoint point);& d1 H$ p0 _' x$ q
( S% Y" ?9 d$ Q, z7 u  g
* k' J: |9 a/ K  p% _$ V! H

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-23 19:20 , Processed in 0.106079 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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