飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件& {2 Q! b, ~# ?( z
搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
/ d% }5 h4 N2 p7 g9 k$ m
3 X9 C* Y* Y/ w& Astruct sItem$ `% `* J0 b+ m$ @
{4 Q: D% x$ o' R1 ?" r
DWORD dwId;7 Z; y' ]$ o, D4 J6 {
DWORD dwKind2;
* k( W6 I; Q7 V4 J" [DWORD dwItemId;
; G, S* }+ \. T% I3 Y1 @# cBYTE nIndex;6 j1 R, R- u% j
sItem(){
4 j2 q. p- p9 m! J  dwId = dwKind2 = dwItemId = nIndex = 0;
3 M  F4 G9 @2 r( A}1 b2 S) \* O' w% l6 }: _
bool operator < (const sItem p2)
8 J  R' N1 G. Y( v- A{$ L* Z5 @( \$ d4 }3 w2 W8 D
  if (dwKind2 == p2.dwKind2)
0 f5 X" V) N. _* l3 C0 u  {
. K5 M. ]/ H  T: B( X   return dwItemId < p2.dwItemId;
( M# {% z6 w+ C' X1 ]9 o" b4 H8 A  }else{
: V" |/ E2 i$ ?  T& e# S) W   return dwKind2 < p2.dwKind2;& z0 Y0 M3 \/ \0 l* d2 _
  }- F9 X. U: V  n% }3 R. s) F, Z
}$ n! r8 s) C2 i6 T" J: ~
};
; K4 l* r( o% l' J0 [6 I' K) _8 kclass CInventorySort$ Y3 \& b% ^2 z, i4 n# L
{' n' G# ?8 Z+ p! {. K
public:) ?: B3 ^4 X. i& ?. e  ?! g
CInventorySort()6 X4 E' M$ Z- A1 a- k7 I5 y/ R
{
! D& Q: D/ [8 _- Q* j1 Y! |; n  m_dwPos = 0;4 {. }! i! t% @% M+ a$ g) h" S
}
7 b2 h  p1 H, V7 L5 b5 v1 ^0 R6 i~CInventorySort(){}
0 j6 P: ^4 @8 K4 n% x: `& eprivate:2 m) B( F/ o$ Z- R7 M  `' G3 O6 P
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息0 L7 Q; `* F5 u; C6 B9 W
DWORD m_dwPos;
+ ?* B# F; H1 T: Epublic:/ y* @  j5 t+ {. j  m, |0 C
void Add(BYTE nIndex)
3 y" v% }9 N; k* ~{1 h2 W; O3 [* Z9 [) m9 F7 ~
  if (m_dwPos >= MAX_INVENTORY)
* F$ G& }7 x1 [- K* G; K  {3 l7 [: d! |& t0 Q  ]! y! U$ p
   return;
/ Y9 ^  L8 e# a+ B9 x  }% ?$ r8 p) F8 A6 ]0 k+ b0 k
  m_Item[m_dwPos].nIndex = nIndex;
4 I) ]1 W" g: m; g$ |8 P( ]  m_Item[m_dwPos].dwId = m_dwPos;
1 U- }9 H8 d3 @- B  m_dwPos++;( z# o( F& G$ W
}* j/ g7 S! }0 P7 d! A" ~: x5 U
BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列- G0 f7 ]+ W. x) Q
{# V! _1 P# P) z3 T2 }
  for (int i=0;i<MAX_INVENTORY;i++)
6 T7 ~7 _, I, N' P7 a' H+ `) Z  {
  F3 N7 x& z; B   if (m_Item.dwId == dwId)
9 Y3 h6 u2 G/ H* C8 f7 p   {
8 F- B( k! Z" W; W    return m_Item.nIndex;  L7 o) y0 z! z; ?: U* u  ?
   }9 r, U3 L6 I* E9 L% D; A
  }( i/ O- h* e4 ?$ t) y6 m' [7 x6 [
  return 255;
, q7 Z! ]5 x! x; Z/ b}. {# _; |1 I+ I
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
$ C' X+ G& ~, ~/ R0 h{; \4 w; n- p7 j& D9 K3 C0 |4 l7 [* ]
  BYTE nTmp = 0;( X) }* @9 z- r8 L; ~2 ^6 U& p) K
  bool bDest = false,bSrc = false;
! k. f: O2 a1 i  for (int i=0;i<MAX_INVENTORY;i++)! o1 a; N: q! g$ T7 Y: c, _4 N' G
  {
( N, V: M: D- `6 S7 E1 P- [" m   if (dwSrcId == m_Item.dwId)' [3 N  g3 }( j3 H' E7 T
   {( l- W8 [0 E8 s7 K$ L$ T. w; h
    //id相等 则 改变对应的dest和src( o0 D3 q5 ^, O2 h, }7 _7 t& y
    nTmp = m_Item.nIndex;
" B3 v, C5 g" E- H0 l    m_Item.nIndex = dest;
2 ?  G2 _& N" E" ^' p4 p4 j   }' X, A, J  p$ M2 U
  }  [. a* q/ i/ f, s, \7 |
  //临时数据保存完毕,交换开始
' h" L$ H4 k6 g% W  for (int i=0;i<MAX_INVENTORY;i++)/ L: E. F6 g+ P
  {
8 h8 `& C- {0 Z& `   if (dest == m_Item.nIndex)
7 N" Z# j* ^! H  e6 y$ @. S   {
+ Y/ u9 s8 W# O5 W% r; c8 }: K1 R: [    //id相等 则 改变对应的dest和src/ S4 ?* H/ g: L9 ~9 F
    m_Item.nIndex = nTmp;$ \- @+ M" Z9 \$ O5 Q
   }
3 W% V9 T% T' s6 a1 `6 s8 F9 n! S# |8 [  }
3 l# e- M/ E$ E" h+ f4 t! ?" ^1 J}
. c/ v' A1 [/ a" j};
4 I- \4 Y6 g; q; n# H" N; X/ n-------------------------------------------------------------------------
+ V1 f6 A3 q7 \* a- c5 _+ w  g依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )* @1 ]' n1 ?! o+ R3 u' F
搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);* {" _' s5 `! T2 R2 F5 u1 B
紧靠其上添加:
6 d" L0 q7 p- ?  ~0 A. ^if( pWndBase == &m_wndMenu )2 ^# }* z# ]5 ~2 M  R
{
; b& y/ x. G$ O  switch( nID )7 P0 k& T  h2 u9 F6 l5 k6 q. U
  {
& n" ]& K9 ^; I/ `0 ^: p  case 2:3 i6 n" E, r$ s" q+ K
   {
, ~/ k7 {4 D$ V    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
9 d5 u+ R( r+ @# Q* U; Y    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
% i8 ~4 H( a4 `" ]+ Q    {! W6 i0 c4 I; F
     break;
* J' p& O- g" S" s5 ]    }
+ _# d4 C  m# U7 A1 C. [- e5 R' r    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)6 G0 t! r# w( `6 w
    {
# A( ^9 A' Q' H% t. o     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);6 V! L0 s& m3 q, S0 w
     if( !pItemElem )
8 y- g, T; e. w      continue;& P. m$ L& S) K. P% z
     if(pItemElem->GetExtra() > 0)0 f+ L6 {" e$ l( w7 ^' ]9 ~
      continue;
' N. E4 q. h6 H! Z7 v# e     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) - D8 x* W0 C3 _" T
      continue;; ?8 H  G; g( O1 W6 p/ m
     if( g_pPlayer->IsUsing( pItemElem ) ). E- G5 F, b( g/ F$ S" ^* F
      continue;
; p/ B! @; p& c; b- i1 m     if( pItemElem->IsUndestructable() == TRUE )0 T% R) T( d% ~6 E5 T7 O
     {0 G6 O/ @. u$ {7 @+ p
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
6 ?; C3 g2 o- ?6 H8 n) J: v$ b5 ~      continue;
/ h' @+ J$ v  `     }+ Z. v8 r; Y1 R
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);! Z* y5 m4 e* M* ~4 Q
    }
$ H" Q, f+ c  y  y5 K! E    break;
3 H: D5 d5 q7 J/ D1 a  [7 L- [   }9 G4 U' B6 k( e1 s; I4 x9 U0 @  f. Q
  case 1:: f# q# E6 A+ s1 _' z
   {
0 e! f, R- u& _7 b: F- d    //整理背包
' ?! a, ]9 K8 n- c1 N- R  i    //////////////////////////////////////////////////////////////////////////
# V3 J! M$ R# W: u    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );2 ]- j' B  ~6 w/ @5 x. P
    //////////////////////////////////////////////////////////////////////////
- u$ p6 A; \. i- Z    //////////////////////////////////////////////////////////////////////////* \( F5 b6 i: m6 h) D
    CInventorySort* pInvSort = new CInventorySort;1 B+ r. J2 p( X* [# Z- T
    vector <sItem> vItem;
. l- ~# A2 `3 u! a    vItem.resize(MAX_INVENTORY);//初始化大小6 A' O5 V& L( b' v9 J3 r! W9 A
     //////////////////////////////////////////////////////////////////////////
; W* [1 T) j$ q! A+ K: L( t     //填充数据- z& u" m/ t# n, ^
     for (int i=0;i<MAX_INVENTORY;i++)% ^: J0 S" f  j9 A9 _6 H+ i+ J
     {; `7 |4 W, b7 Z+ P4 N/ t
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);1 V7 a7 o" f5 C6 k8 [
      if (!pItemElem)) T: `) B3 X+ m) B( r- t
      {7 n" Z5 V& D% y4 n: |
       vItem.dwKind2 = 0xffffffff;
% U6 ^- a( `9 y3 x4 R. l" Y/ O       vItem.dwItemId = 0xffffffff;
/ D0 F% f( a1 a, c: ^       vItem.nIndex = i;$ P! O4 Q8 l' W4 F! F" {* ~/ q
      }else {, X' D* D2 R3 P1 {" k: {
       ItemProp* pProp = pItemElem->GetProp();, Z+ f0 U' b" j) O# k
       vItem.dwKind2 = pProp->dwItemKind2;
2 V* F' A0 p7 C. a% K- k       vItem.dwItemId = pItemElem->m_dwItemId;& S4 U) U7 t, w6 a7 |
       vItem.nIndex = i;
5 R, t8 d% B+ O# J' ^: \: L! |      }6 G& ]! F& \% i$ M* p$ k& C& a4 Z
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);/ x! g2 u  D% c1 k) F, W  Y
     }
1 L% u* ?2 R9 o% V, S     //////////////////////////////////////////////////////////////////////////
9 J) ^8 E& m2 K/ P; |% E     sort(vItem.begin(),vItem.end());//排序3 j0 K( s: t2 y) ^+ d
     //////////////////////////////////////////////////////////////////////////# P2 G# A5 D& f0 J& g) q3 k" @
     //交换2 B1 q/ L# F4 {
     for (size_t i=0;i<vItem.size();i++)7 s+ y. @( ]( D! s6 x7 [0 e; \
     {2 X& s$ J4 Y" h
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
- t  e  P1 v) G$ {) B      pInvSort->Add(vItem.nIndex);
) F7 Q. Z- O9 J* ^     }
* W& l  _7 {  A% m! W     BYTE nDestPos = 0;3 ~' v" O% g- ]: K' J  [) A
     for (int i=0;i<MAX_INVENTORY;i++)
9 f/ |+ L5 o8 d9 v     {) k/ A! q  g9 k  P3 `7 |6 ?
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
+ r1 E4 Z: d2 R7 r: S4 ^3 r* [      if (pItemElem)3 f0 X1 `7 `2 G$ Y* g' |
      {# W. Z# m3 U7 o' [* Y" c6 M! T/ F
       if (IsUsingItem(pItemElem))
& a! R9 S, _+ i       {9 A1 S8 y8 P! W$ y& J2 r+ T
        //这个位置无法放) |4 i+ X3 Y4 J4 J3 b2 X: O4 D
        nDestPos++;
6 Z( U) `" r9 l# N       }. L: y7 z7 f+ k1 A+ U4 [
      }
3 d' j9 I* u2 ]3 J0 s      BYTE nSrc = pInvSort->GetItemSrc(i);
4 d; G+ `4 d; E  S3 ]* g; M      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);- X! `' i; @  P4 G/ k
      if (pItemElem)
9 a4 R1 D! t5 T      {
, ?% _$ G# C4 }" f8 L       if (IsUsingItem(pItemElem))) B( r  \) U# j7 j/ b) t
       {& z- v" ]+ l4 G) A: D% x! C
        //这个道具无法移动,跳过& H7 V* |( J6 ]" Z
        continue;- [+ N# {( ~* c
       }3 B, L! Y- M) p2 Y
      }else{
: n" {7 B& e" R/ E$ c       //空位置 不用动2 U+ ^, N; A: E! _; c" H
       continue;4 ~0 ~$ W) O, \7 q5 l* w. n4 _' k
      }
4 ^+ t# z  E. w6 f      //////////////////////////////////////////////////////////////////////////
: P$ M5 ]7 H+ B" {$ O8 \      //开始移动
- l+ V4 M! L. K) V" N+ A3 {, K      if (nSrc == nDestPos)$ X8 @' F* m4 i9 @) d
      {
. W8 Z# k2 L% d: v. V       //原地不动9 b3 T. D& J0 o; W1 s  i
       nDestPos++;. [  x2 ?5 K: Y7 u2 H
       continue;
( V3 R8 e6 m& y( W" o      }/ @1 m0 M2 z' l' y; ]1 X0 L/ Q! Z
      pInvSort->MoveItem(i,nDestPos);* k& |8 O5 q& u6 T
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
1 D' ^' Z1 I) c      Sleep(5);
" I4 t. ^9 ?# v) {/ U      //Error("移动 - %d->%d",nSrc,nDestPos);
  n1 u( M# }! p      nDestPos++;+ G* W9 _' d2 c. [
     }$ N4 Y. g) r9 |: a( [; i
     //取第一个元素的信息1 N% N9 R: E) {* k2 c$ W
     /*
2 q+ s& D) {/ D, Z     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
7 _+ w- {6 ^% X! E) f     {
# a6 z1 C1 Z0 \      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);1 Z  G: Y. o$ P8 h( `- j6 c. c
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
6 F- s% i& J. @5 I. `     }, `& f; y7 \# Y0 R. n
     */
' S3 @7 _6 a- K% `9 P' x    //////////////////////////////////////////////////////////////////////////
8 e- N6 \3 [# D% n, |    break;" B% y* h( k- L6 l  M; D; g
   }
8 Z4 I- z: y( @1 ^' H, |  } # u9 `4 e: J$ Z8 M1 C  O8 F$ M  _
}
4 N2 s. P" j7 O2 jm_wndMenu.SetVisible(FALSE);
2 `  P: o: Q3 O' g) ~% K6 G/ W3 I6 W
--------------------------------------------------------------------------------------------------------0 y$ Y+ ]# P5 h& f
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
: @) {. |' [; \{5 ]- Z+ y( r4 K% T; {7 |' Q( O" M
BaseMouseCursor();
4 s/ k5 [8 U5 i$ L}
: `0 T8 S  G3 P5 a$ z/ v6 A1 w在其下添加:& E. b/ G1 r5 V
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
2 m/ I2 s# j: f{
# ?8 w5 j) B, N3 Q' [m_wndMenu.DeleteAllMenu();7 K/ l4 N; E3 W( D9 B: G$ V
m_wndMenu.CreateMenu(this);
" j: E! W9 J/ f$ n7 ?! N, X+ Vm_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");% l# [" ^7 O4 u* S" A2 O
! M1 P; z7 Z* x( R5 G( H
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))* V' m+ k2 s' X; c$ |3 d
{
3 c" I: t0 D! b0 u- _  //P以上级别才可以删除所有道具( P- h, S- r$ T! X
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
" s& ^- H/ x& N5 F! O3 b. o}
) ~0 p; v* r0 Z& Am_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
2 G$ u. r) M" k+ r! B' Ym_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );! c1 n) e5 t$ l
m_wndMenu.SetFocus();$ |- A! p8 F5 z- ]
}: q* ?3 F/ r/ t; e9 e# Y# w
------------------------------------------------------------------------------------------------------------( d/ v- f+ F' Y# v) a) m
*************************
% y. w+ c; R# gWndField.h文件* y7 L& V: b0 Q
*************************. Q" w# f7 n) C/ i1 Y" G/ t5 g
搜索:BOOL m_bReport;  M: ]* L. X. ~% y/ J# {) c
其后添加:
; u6 q3 H9 H' SCWndMenu m_wndMenu;
* u! }7 e: V; ^$ a* z搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
5 b. m4 c% A% F3 l其后添加:
( J" h2 X  k& L. K, mvirtual void OnRButtonUp(UINT nFlags, CPoint point);
4 O( J+ I* v  _: t2 D$ `. ^& E6 p9 K
: Y! o/ v' G3 y) V3 M6 P: N! G

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-11 02:46 , Processed in 0.150314 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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