飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
0 c( g  U8 b: S# N  @% x搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
, ]9 Y6 s8 l1 y/ {2 E2 V" Z
6 W) C2 c  E7 M9 cstruct sItem* [6 o8 b* P: J" @5 e  M" x/ e
{' i! x* t* g6 e# C
DWORD dwId;
  ^* v$ p3 E$ UDWORD dwKind2;. D: @0 ^. i6 ~; t
DWORD dwItemId;, y9 J( N( q5 K( T6 i( j& |3 S# `# j
BYTE nIndex;
  q2 s7 w5 p) k- h8 h6 w7 isItem(){
* S) H/ d6 D; q  U  Z: h  dwId = dwKind2 = dwItemId = nIndex = 0;
' `7 ~' k1 H. R$ J9 K8 k! y}2 r6 _( i& _; Q+ g' G: Q9 i
bool operator < (const sItem p2)
( c6 [4 j, p; J3 n+ ~{
$ G) h  _3 I2 y! t7 y* ?& L  if (dwKind2 == p2.dwKind2)$ m% Y4 V7 C4 ?) ~7 m+ ~4 t% f
  {
# L9 Z, B" G; _4 [# H8 f! i; ?/ c   return dwItemId < p2.dwItemId;: _3 A; Y! J/ d9 l/ B) h0 k* e4 p
  }else{
( Z: y9 `8 F0 |8 n0 {' V2 Z' R   return dwKind2 < p2.dwKind2;3 F) P4 L$ P3 p& Y  ~
  }* @4 l+ Z: `0 f2 x. K. _0 K9 p( y8 m
}
/ c5 E1 c; M$ p* l0 V( Z0 `- h};
1 `* f1 t( f2 h6 }class CInventorySort
6 v- j# h& u3 j6 \% g, J. H3 v4 F{& p3 v3 A( P6 P  X' X$ k" b
public:2 f& C, h+ S% T" I" R7 m' R
CInventorySort()' M0 J/ R% U: Q) D9 e% H* O
{
: E. P- p3 R9 @) L  m_dwPos = 0;3 ]$ w9 K' @' k- |
}
! V1 c2 w5 O, C" n, a" `( s~CInventorySort(){}5 S$ L4 q# X) j" v, k+ U/ @) |/ R
private:
' c- J8 U  A8 I7 C4 MsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
8 P1 S5 ?0 O! H9 R: q/ X' t. vDWORD m_dwPos;0 Q' W- e2 Y8 O1 K, F. v7 q1 S" [
public:$ t% {  F+ _% z; y
void Add(BYTE nIndex)8 D; P+ X% L" b- h
{
' ~, Q7 z( w, ]3 K- k  G  if (m_dwPos >= MAX_INVENTORY)" @3 w! \; R& _3 v
  {& h9 b. X2 Y$ r1 [8 }0 O( W0 S- h5 z
   return;3 Y2 O/ n/ v8 U- _7 ~& b' \9 q5 F
  }
+ T1 U0 J: x% S1 X) |' D3 ?  m_Item[m_dwPos].nIndex = nIndex;
! c' l' e5 ~: ?8 C! ^  m_Item[m_dwPos].dwId = m_dwPos;
+ o# c# D, _9 f  m_dwPos++;
- g: E3 h% o* t2 W% x}( d3 G& m7 e! f9 i- b" i3 I
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列3 J1 F$ _1 D0 f
{
' L; i0 _5 u+ ]& z6 C- ?5 _  x  for (int i=0;i<MAX_INVENTORY;i++)
3 D' j  e2 k$ u7 S2 @1 F  {8 x- `( R* }4 [# ^1 C
   if (m_Item.dwId == dwId)$ b4 H5 z, U2 H- K" R/ a! I
   {+ C; o4 C5 P$ V* F% K
    return m_Item.nIndex;
1 m7 l" A* L! P) n# H0 ?+ d- s) j   }
& @) \. J5 Y0 C2 X* }  }/ W! B. ^  O' g' g" X' {
  return 255;: V3 A9 p; E  ?+ W! Z# t
}& E# v. W. O1 G6 J# a
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
* U5 M, G+ N: F8 R{2 b* X- `! x& `# W- Q3 l
  BYTE nTmp = 0;
4 r% r/ x+ P: u. S, Y1 i  bool bDest = false,bSrc = false;. o6 G4 x# |1 G& j% \
  for (int i=0;i<MAX_INVENTORY;i++)1 x9 y  a* }; \8 C6 ?% J6 L
  {
7 [! X& c* w9 Z6 M& H   if (dwSrcId == m_Item.dwId)3 }  [* C5 b( a) F
   {+ Q9 t1 ~& G* P' S. }6 C* e
    //id相等 则 改变对应的dest和src
" B" H) P# T, }7 Q2 e4 V  f( V    nTmp = m_Item.nIndex;
! c. o" }! `( A: w    m_Item.nIndex = dest;  Z3 S, @5 o! V: o% S" R* q% z
   }: j2 n2 W5 h# o
  }
- ?% o/ j  t4 a  H2 z  //临时数据保存完毕,交换开始$ o/ a8 ~  y! R, W5 u( S
  for (int i=0;i<MAX_INVENTORY;i++), P$ I9 r7 Q* `, w3 C6 R
  {9 r0 I$ n+ e# H! N5 C
   if (dest == m_Item.nIndex)
# X# _% q# Q- h. a4 u# T   {
* b- ~4 [  @4 s    //id相等 则 改变对应的dest和src& Y$ P* c5 v0 C$ C0 R6 i9 y
    m_Item.nIndex = nTmp;4 R4 b# s: A. A- }+ N/ s, ~
   }
5 Y0 Z* ]% _% g( f  }
: H$ a2 M* E7 J: Q. a9 ~* l}
% E8 D% ^/ b8 y9 j7 `' D};
4 h5 t7 c7 f; O# a7 ?/ N" ~-------------------------------------------------------------------------4 _% L0 L6 b2 U- N: j: |
依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )& a3 N5 ?5 B' {  {: R; @( e: P
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
9 j0 V4 {4 P# V0 y& a) W紧靠其上添加:
7 u+ C, D' ~9 B0 u- e" ^* f7 @0 Bif( pWndBase == &m_wndMenu )
' M: u; R  V" R" x' U0 x  R{
9 c% \8 Z( w5 B8 \8 Y7 I  switch( nID )8 B1 P( q% N- c+ Y
  {$ y4 _( b1 n; e' V/ o$ r. i
  case 2:
2 K8 H5 h& B5 m+ A# J9 P   {
) a* ]6 i2 z5 H2 C    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
! a9 a- K' b1 ?8 s! ?4 j  P    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))" E8 U, n, I8 V8 i9 A3 M; D2 K4 G0 v
    {* N. N, z3 A' ?
     break;
0 \. r# P* [7 i5 y8 ~    }
3 k! w: }2 d9 f    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
0 S7 f/ @- p) D0 G- J/ z    {
$ u$ T0 s& W" m" T% A& H# x     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
" v' F/ M- n* l( w     if( !pItemElem )
3 M& I6 q# f: b$ V/ v6 a      continue;% i( [: M& I2 J: O
     if(pItemElem->GetExtra() > 0)% v6 m1 Q% I: S% D. ?3 S, z5 R6 j$ ?
      continue;7 R, k* _7 x, P3 v: A# U
     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) . `9 l4 O2 m- Y0 N  A& G! [
      continue;1 D: k4 R$ H8 A' v
     if( g_pPlayer->IsUsing( pItemElem ) )
4 O' c6 j5 u! D! X/ V/ a      continue;
$ n. w+ F, X1 G8 u* E! b     if( pItemElem->IsUndestructable() == TRUE )$ H0 S7 J2 I, G# e8 [
     {
* ?* ^1 f( x: g! w7 i      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
' o/ J  ^3 Y9 G9 P  p$ a      continue;9 @# Y  \# X! L2 b- j5 V3 E3 l
     }3 B# J: f# v: @6 n; s: V; l, v7 S$ T
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);5 P' q4 N% P3 [
    }
5 k5 N  {- e! U5 F, W. o, ^4 k    break;3 Y$ M# }' r6 O6 b" ^
   }
+ B/ n+ t! t7 W, C  case 1:6 e5 e" _( D- O. s- w( j: B( Z* i
   {
( f& m) P6 A# x+ [    //整理背包& q) \  y, R$ r0 c
    //////////////////////////////////////////////////////////////////////////
& H. j- J# A# H9 `, X; c" p4 g    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );5 Z7 n1 Z) J6 c$ w5 V8 S0 T
    //////////////////////////////////////////////////////////////////////////
/ o" S* c4 B+ _: c$ k( G    //////////////////////////////////////////////////////////////////////////
" w7 g* H! F! s: A9 H    CInventorySort* pInvSort = new CInventorySort;2 y! X( Q; ]. i  ^
    vector <sItem> vItem;
; \7 x  D  ]% y+ p9 F    vItem.resize(MAX_INVENTORY);//初始化大小$ o6 R, X  l; m
     //////////////////////////////////////////////////////////////////////////5 q  m1 `: R, L# \9 _% g
     //填充数据
  Y+ [. `1 ?4 l2 v" K' F     for (int i=0;i<MAX_INVENTORY;i++)2 O9 M+ E0 l% E0 ?5 B
     {
+ l' s" ?1 o( F6 I      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);$ P, p6 S! q& E8 A0 x8 |
      if (!pItemElem)
0 A0 E( h- L, M' ]# ]: y' l$ Q      {- C, A0 F( _1 R) q
       vItem.dwKind2 = 0xffffffff;% o. q" p+ N( U3 |! |; [
       vItem.dwItemId = 0xffffffff;
) g$ _/ w) V7 g- t5 V* U       vItem.nIndex = i;/ F% N) D5 g) r& R" Y
      }else {
4 |9 W) K) H. U: t, h       ItemProp* pProp = pItemElem->GetProp();
  H" H% S4 A; ^4 C( d       vItem.dwKind2 = pProp->dwItemKind2;2 i0 f: i7 w# W3 o2 S3 I  W
       vItem.dwItemId = pItemElem->m_dwItemId;; G& O: [% e3 a2 `2 o+ B) p
       vItem.nIndex = i;
- g' H8 K8 A' j6 h% u1 F: W      }9 E% I" Q; ~! }
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);* H" [  K* [$ @9 v/ I( x
     }( H; o% N# l+ \$ b  ]9 ]
     //////////////////////////////////////////////////////////////////////////  I) l  z( N# p; @; ~. @
     sort(vItem.begin(),vItem.end());//排序# Z5 j8 S- g6 B9 R
     //////////////////////////////////////////////////////////////////////////
3 w/ w, b# f; t+ G3 f     //交换+ s5 Y5 }% L) Y" x
     for (size_t i=0;i<vItem.size();i++)
, l' i: i3 |) t0 v6 p! U4 F     {' w7 w3 z% L; x5 w& i. u- t
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);$ h" F# ~9 P+ P4 F* J4 ?
      pInvSort->Add(vItem.nIndex);
1 q) \5 [3 _3 k7 S( {4 x     }0 t# i, ?% {' V( h  O2 \
     BYTE nDestPos = 0;" F# e3 Z' ?* b5 l& y% b  X3 f
     for (int i=0;i<MAX_INVENTORY;i++)
- `  h- d: M" b* i. q     {0 W- m! Y# X* i( G) m+ q: S
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);. l8 g4 h  ^6 _* I9 g: z  n
      if (pItemElem)
( f# k2 K0 t8 y' l7 [      {
& p& Q" x* X& ?* y       if (IsUsingItem(pItemElem))4 i5 o9 X2 `' t- s( Y3 ?/ c9 `
       {3 Y$ q5 F: q+ L8 r  Y, n2 C. n
        //这个位置无法放) v* P0 u7 d! f+ M& j
        nDestPos++;3 Z3 g! b- M. J) e6 {2 y1 p" p7 _
       }
% p5 @) ^- m8 l      }
! V) x6 q( Y3 F) Y" t3 C! D      BYTE nSrc = pInvSort->GetItemSrc(i);- R5 @/ L. e$ h8 S" p
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
( w+ X7 t, r/ N: ]1 v1 {' _% A* U      if (pItemElem)
8 R* Q( @' r. X/ i: V' o$ \9 o4 C1 e      {
( S: I3 A4 U: |7 d# ^       if (IsUsingItem(pItemElem))  Q5 y& ~7 R) p! h0 F* e6 u
       {, h8 A/ h. U) L+ Z8 z8 F" N
        //这个道具无法移动,跳过
/ u9 \7 \5 u! {; a        continue;
+ R; E# c0 a0 P0 k% a) r7 g       }7 X# z& P% V, N% f4 g
      }else{
+ W& S9 H) [: v0 L       //空位置 不用动
$ J2 v' H7 D$ q) S- M! O       continue;
- c2 ]* N, e! M' B      }
; X( y3 v3 h- {& Q      //////////////////////////////////////////////////////////////////////////
: @0 J) s  i$ ^8 e      //开始移动
  n% }; I3 d# d& H* m, {      if (nSrc == nDestPos). H9 c! O# X. h5 N
      {( H) `, [; U: s; V, x. Y
       //原地不动
! j; ^) T" ^* p' n+ p* u# R+ w       nDestPos++;
! \" v7 |4 q: I/ O! u' K" P" O% Q5 ]% R       continue;
# E1 H& N' \7 c% P/ k! C2 g# \4 O      }" D7 P; d$ e. L
      pInvSort->MoveItem(i,nDestPos);
0 R, E. M. {  [9 F  L2 A& W8 P' `      g_DPlay.SendMoveItem(0,nSrc,nDestPos);! D) k- u9 [/ M: v/ E
      Sleep(5);
- ]/ C( R% P0 ?# ]      //Error("移动 - %d->%d",nSrc,nDestPos);9 _5 m4 Q* `" \& Y6 @! }* J2 }% r
      nDestPos++;
* q9 o+ J3 W8 U& K: m0 V     }  ?# M* \9 n/ K& j5 G6 t7 z" e1 R
     //取第一个元素的信息
2 I6 p% D5 p- {# L     /*
  G' X1 N, y; i+ U, q4 |     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)% i- U6 g  u( e' Y8 R4 g! Y
     {: ]( b0 H0 N1 v& S
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);3 P/ H' K# u) d0 O( \# E
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);- b* U8 L4 X: @- A# \" x1 j& N3 ^
     }
. B1 [8 L! ?* e6 o$ {& f     */
5 J" G+ Z$ J: S. B# R5 d3 P3 K    //////////////////////////////////////////////////////////////////////////
: c7 v2 T, r* K6 {0 q8 W    break;4 c3 Q/ \( d; Q! F) n& o" j2 ]
   }/ i3 e- s& T" {) y* i) `
  }
: R7 ], |4 y1 G}' g- U0 V" ^, m7 {0 ^% P9 o
m_wndMenu.SetVisible(FALSE);
. L2 k/ S6 o& x+ h( ?( _( j/ J; A6 J4 x5 y# e" \( X
--------------------------------------------------------------------------------------------------------6 q0 i) L9 u- k2 w+ |% W9 ?8 |
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)! |( f8 q. M/ O* K& @
{
$ l6 Q/ J/ w3 G  p; {/ aBaseMouseCursor();, I. m4 ]/ Z' V4 v& P
}2 W& l7 X4 b  j8 N8 o4 e
在其下添加:
/ B2 o. ?, h6 l* i; _2 E  e: z2 Ivoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)0 G1 S) J. U# s6 }
{
' |5 x0 W$ P( Sm_wndMenu.DeleteAllMenu();* p: B/ j: R) Y* d* F) v/ s7 i
m_wndMenu.CreateMenu(this);3 k) \! j. x5 K. t, S
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
7 w: a, n# Q1 Q/ N; E; {  G2 q% p
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
& k& {- j8 \! N3 v- t4 \{
; F9 u* w/ \$ D3 a* s  //P以上级别才可以删除所有道具8 U# q- [0 X) S
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
% m- ?! Q$ m. F- [}( |; `; v4 V2 J. Y
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
. {  V' u( L. u6 b* t( g+ E; Bm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
) A6 @% n! s4 f: c5 bm_wndMenu.SetFocus();# D! ]2 ~* z$ `0 ~% k
}
) l# k: `; z; P, ?7 t- C9 F; }. ~( C5 T------------------------------------------------------------------------------------------------------------
# j; P7 {$ n; a: ^" L6 \2 Z- j*************************7 k: d  B' A/ O3 x$ k: F# F( Y. G
WndField.h文件3 u0 ^" u. \4 d6 N4 x8 ]
*************************0 g" I/ X) s5 L, F- g- U. Q. I
搜索:BOOL m_bReport;5 y" _+ w6 @; Z
其后添加:9 J4 \9 i& Y6 G0 @2 S
CWndMenu m_wndMenu;
, O- w1 s* `3 O# w2 C) V& [1 M. m" P搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);. f- D; o. W. n; k2 q! H, d
其后添加:
. u1 U1 u7 j9 J( q" Q, Zvirtual void OnRButtonUp(UINT nFlags, CPoint point);
  c! ?& |8 l; ]6 @1 f, Q0 d
& P9 E6 S; u4 q
: R* u( X$ c# i' K2 Y

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-3 21:28 , Processed in 0.061750 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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