飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
2 y  w1 f4 r  e7 `  F5 d  T搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )/ a8 e& |) N/ {$ t1 j; c

- f7 a$ v7 Q% ?struct sItem
, {7 K4 `  a" @- A5 k9 b{
/ s3 P$ b. F6 F1 S  @- ?# s9 e( F; ~DWORD dwId;9 D: a3 a* M+ E0 x% N9 p7 h: n4 U* i4 M
DWORD dwKind2;
1 Q% h0 M) A+ K$ `DWORD dwItemId;( [" x+ Q7 x1 j6 \; Z& Z, B
BYTE nIndex;2 D8 A# ^* I0 J0 N
sItem(){. v4 `& a$ s0 Y" s1 d5 E; i0 x( p
  dwId = dwKind2 = dwItemId = nIndex = 0;
  j0 R+ H0 T" q1 F+ P) D! U}
! J1 E( ]+ I) c- z" }bool operator < (const sItem p2)
. o+ E' S0 s1 z% b; `2 _2 I3 z{
9 P. I- m1 T# l( G  if (dwKind2 == p2.dwKind2)
; c  t, S7 a# }) [) y  {
# g: J8 k3 x; h+ k$ H' r   return dwItemId < p2.dwItemId;
+ w# R; g* I) c( L8 J' M- Y' q  }else{
0 i  R/ I. @- \% S+ S# P+ W   return dwKind2 < p2.dwKind2;
# _8 w8 J& [& w8 i2 M  }/ s2 w4 w( N: I: y+ y7 i( Z
}
4 c$ q3 I, |0 `9 T};0 b' D1 N5 i# v" J
class CInventorySort# G4 x" \: B" G3 J- ^
{
3 X: x% a# W2 P( Y; I" Opublic:# X% i  W- R. n' k
CInventorySort()
$ l/ W* q1 h' F( c) ~3 m{
5 f  h% H0 h2 ?( j7 V  m_dwPos = 0;: u/ a, Q8 E) D7 [" b
}: N! e* R$ C& a5 c
~CInventorySort(){}
7 y& b/ r6 Y* Dprivate:+ h# n; _+ O" k( v
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息: {$ [9 ~! N5 E. c
DWORD m_dwPos;" d) G9 ~/ p$ t  x- A: u  R) A) G
public:
7 ]2 j! [2 m6 \+ Y7 l8 a* Z4 evoid Add(BYTE nIndex)
# W4 A& E" R; v; w2 f; O- r{) a- M: i: O/ L( I
  if (m_dwPos >= MAX_INVENTORY)
- {5 Q5 l# S6 r; P! @( {: y  {
  a1 S5 ?- m1 |* M# B" U  J, u1 L   return;' ^1 U5 M; }: d, z& w& C+ u! i
  }
7 ~  S  E) _4 Z: k  m_Item[m_dwPos].nIndex = nIndex;
) T  t" D" |4 |  m_Item[m_dwPos].dwId = m_dwPos;
' N& o' z9 x! P. V  m_dwPos++;7 l& k+ ]- h& R7 a1 D
}
# ]. n1 |' ]+ @: eBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列
0 o6 _, i  h: ?0 v  G' Z{% v& r9 `! c# \) l
  for (int i=0;i<MAX_INVENTORY;i++)
7 x$ T# R4 r$ H4 B  {. n; g7 [% M, o9 u1 G! Q
   if (m_Item.dwId == dwId)
7 |* w) c  \/ ~6 m   {
& S. b$ V! [% p    return m_Item.nIndex;
2 B& G1 i4 K" s3 q" d& P3 S   }
- X5 d1 A( ^3 t7 f9 z# r  }
' J' F) W2 L1 F" C  f/ F/ C8 K. H  return 255;0 E( W& s) P' v* c- X
}
3 S) V) v1 M) n: j5 N& ?; Cvoid MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置, _) i+ |5 t9 p* k
{* M. R0 U2 v( V9 C2 s
  BYTE nTmp = 0;, c  |8 Q& X2 k# K1 }- ]
  bool bDest = false,bSrc = false;! E" C8 r" C- A% `7 P) M/ f
  for (int i=0;i<MAX_INVENTORY;i++)( }) ^% w$ ~* s+ m) p+ e
  {
: d, c0 g! k! C* y5 O! z! U5 e& {   if (dwSrcId == m_Item.dwId)% T6 P% y# b- p1 \0 h/ X/ B+ l
   {
8 ~0 v" u6 ~6 y    //id相等 则 改变对应的dest和src
2 J* B4 R2 ^7 P% _    nTmp = m_Item.nIndex;
9 L; H) O5 _+ a+ q5 B    m_Item.nIndex = dest;' _; N& G9 s: z0 S7 r
   }9 A0 [& q1 g+ l' o0 W' {3 c
  }
: k/ ?5 H) S* b" X8 B' f  //临时数据保存完毕,交换开始/ z5 J% ?! W5 }' s: |
  for (int i=0;i<MAX_INVENTORY;i++)1 ~$ V  @7 M9 [, [( M/ b4 L( ]
  {
1 W! i7 X: W- H9 {   if (dest == m_Item.nIndex)
6 m6 f. o: U1 |/ S   {, q6 o' z1 a( u0 T
    //id相等 则 改变对应的dest和src0 H) |5 F- H+ o; M* a
    m_Item.nIndex = nTmp;. S: p( d) X, {+ H* W: P+ {) m
   }
! ]* @6 `$ Q0 d  }0 s8 O, q/ @% S0 s* q
}7 `' r+ N+ t  D9 H( ~
};
9 u# Y1 R" _" ~' J' O) E& S9 u7 I-------------------------------------------------------------------------
# s2 \; ]& ]5 x% z依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
: U6 J0 c6 y; W( m  O2 ^搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);
% Y& f7 U% m6 I7 m$ \$ z/ Z3 l1 {紧靠其上添加:
: @$ i: r+ h% `6 Hif( pWndBase == &m_wndMenu )
2 Z* ^" k+ ?' W3 a5 S{
, l! y/ e' K/ N, O& |* W  switch( nID )
( J6 x" t6 U- v  {
! c1 `7 _7 ~/ L7 C! q6 [5 C, w/ N  case 2:- Y7 U" w9 Y# w1 t& K; m
   {
' q' r4 j' H$ `* e8 [6 U$ s* U    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
, |2 I! e  n1 b& r    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- x- N1 |2 j; W9 r( m7 A0 i- N  a    {" a& z+ N$ m5 }, {( {0 {9 S* ^
     break;. J( N* `" ?3 ^2 L
    }- X  ^* e# D0 c* l. @, i# y' J
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)* v# P/ A9 b4 r2 X7 x# R4 j
    {
7 ^7 x, w" [4 F  r8 T     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);- w2 W7 a- i' U% Q$ x
     if( !pItemElem ). K' |5 Y- x$ C& e7 t0 Z5 B
      continue;
3 l% L/ k4 @3 Q3 z1 E  W/ ^* e0 _     if(pItemElem->GetExtra() > 0)
9 h3 r. x- X) I. u/ `      continue;
/ A  y& ?- l/ o3 N! X4 d' M     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) : p8 {5 i0 p$ u7 h
      continue;
, R5 ^9 K3 N, J' R8 ]: C     if( g_pPlayer->IsUsing( pItemElem ) )* O: G, h9 ^  V/ K' s1 X, C/ a+ O, w
      continue;
! q; O- o1 y# ^3 e/ ]- h1 u/ ^  v     if( pItemElem->IsUndestructable() == TRUE )7 E  b! t7 d# c
     {  o. X: O4 G3 j! v4 q
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );1 x7 A; w, j5 i+ n+ x# N! j
      continue;/ Y8 t( D& V( ^0 q7 [0 b
     }
6 H1 @3 k3 {, l) W     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);) {4 ?$ \( G" Y( a5 l4 o
    }1 s4 s- p4 f8 ]2 U2 L
    break;2 g. ?8 K  q) B, z
   }1 B! m, ?2 Y8 x6 |
  case 1:
' n' Q4 p4 d7 x- x   {
+ v. b6 z( D, Q0 s    //整理背包, C! r$ N$ D  y  U+ T. N
    //////////////////////////////////////////////////////////////////////////) e" u5 J0 Z2 `+ w* ]' ?7 C0 g
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
. ?8 O" Z  x6 a9 n* O    //////////////////////////////////////////////////////////////////////////
/ v; @, f2 d" c$ Z$ _    //////////////////////////////////////////////////////////////////////////5 F' u, J5 ]2 S! I1 l% n- y
    CInventorySort* pInvSort = new CInventorySort;
3 r1 F, Z0 X) i  H" c" _4 [3 d    vector <sItem> vItem;! w- S* n) N! B. g6 D& l# H
    vItem.resize(MAX_INVENTORY);//初始化大小
. p: ~' t6 [. x' I2 ?, L     //////////////////////////////////////////////////////////////////////////
# I" Q1 x2 T5 C/ K$ Q     //填充数据$ l% q' l, M( h7 b! `, u- k" q
     for (int i=0;i<MAX_INVENTORY;i++)
- s' g/ l/ a/ ~     {
1 c. i7 d* X  p+ T      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
, f6 V: F* e2 d- K' g$ k3 Y9 J: X7 x      if (!pItemElem)
5 y( o+ K/ n; K: T1 Q" c. J' o3 m7 o      {
3 [1 o6 D' F- O! j$ S3 m6 b) |# b       vItem.dwKind2 = 0xffffffff;5 W+ v8 i2 D8 Q2 S
       vItem.dwItemId = 0xffffffff;- Z% P' o! d4 ]" E  v
       vItem.nIndex = i;) Q* c: b8 ^& [2 ^2 `; S* h6 I6 W
      }else {) X, }% T7 s9 \. c4 [* d
       ItemProp* pProp = pItemElem->GetProp();6 M# k2 R) @/ t! p8 R
       vItem.dwKind2 = pProp->dwItemKind2;9 Y, X9 N/ d6 l2 g) O2 A
       vItem.dwItemId = pItemElem->m_dwItemId;
, b0 Z! Y. M* u5 v       vItem.nIndex = i;3 t/ z% E4 y7 {: Z
      }
4 s2 F) N( v) o4 ~' V      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);" i) {7 P5 o1 g$ e
     }
6 }+ E" L. ^+ H4 o# ]2 g* G     //////////////////////////////////////////////////////////////////////////
+ T7 H: j2 S2 D* c     sort(vItem.begin(),vItem.end());//排序1 k$ o2 u( s4 b
     //////////////////////////////////////////////////////////////////////////) i. U0 ?: W% N
     //交换
; i2 u5 ^( j0 p6 m$ R! k     for (size_t i=0;i<vItem.size();i++)
% G1 P; m: J0 x! I3 z     {
: L$ b+ G% y( j. |; E; z* n$ k& R      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);( B2 @4 F; ]/ e$ P2 D5 E
      pInvSort->Add(vItem.nIndex);- J/ H& c$ I9 ^! X' d
     }
% C% c0 p" R9 j: |8 U, z9 ?     BYTE nDestPos = 0;
( ^; ]8 r! |5 L6 I     for (int i=0;i<MAX_INVENTORY;i++)
* Q& ~- U% B& {% k% I     {/ f& [/ ^, Y/ `/ C
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);, w1 i$ |/ f1 g# _3 W( K" {
      if (pItemElem)( e! s9 V* g+ I/ y/ O
      {
# r& u2 {1 v& \7 L       if (IsUsingItem(pItemElem))  u( s) f" m1 i- |; p
       {& l1 B( y+ r2 H- b8 W% j: B& n3 H
        //这个位置无法放" ], ~1 z2 u6 q% d  A. H4 o7 d
        nDestPos++;
9 t  @$ ~8 o6 m       }
( O3 T4 F+ h/ J. p  c      }
; o: i  z: U$ }  T      BYTE nSrc = pInvSort->GetItemSrc(i);
6 s: [+ u7 u& o0 x9 d      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
  p$ m. B% V& i. l& D      if (pItemElem)
& g4 k1 ~2 j# L      {
* L! `. v: ^1 V       if (IsUsingItem(pItemElem))
/ W% l% t' W1 \+ O2 @       {
# Z) {: Y% c5 }# P- [2 \5 X6 g, Y        //这个道具无法移动,跳过& P" `! e& _& z
        continue;
/ n5 C' l  f( i       }
5 T& H/ g% A* c! W) `' O  D      }else{/ ^9 r- V( H3 R, x- M
       //空位置 不用动, U& O/ m/ ^6 a6 e! c6 ?
       continue;
; l% D- |( g8 f4 X3 ?  P" c+ f7 w      }0 K+ O# l* K) @9 Y( v
      //////////////////////////////////////////////////////////////////////////" P& Q/ r/ l9 Q. M
      //开始移动
  z; i( ]+ q  x/ e      if (nSrc == nDestPos)% r+ |/ z! ?' I/ B
      {1 j# o, ~, D2 s/ j  W0 t
       //原地不动+ T5 S$ l3 _$ p- |
       nDestPos++;
6 Z5 G' C6 \* T) O' J: Q8 u  |       continue;' V& h" X8 S4 U  s. f8 J8 j# c& \
      }6 N) ]* K. c/ x+ T* ]$ f# ?
      pInvSort->MoveItem(i,nDestPos);- {( ^% i1 {' j+ }) {# Z
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);
/ Z& N0 m# g! K8 V# R% A7 t      Sleep(5);
6 X4 R0 m+ ]% w2 Q" ?. o4 E$ @6 d      //Error("移动 - %d->%d",nSrc,nDestPos);
( v8 {3 s3 I0 O, J' h: N  y4 o5 F! u* `      nDestPos++;
" v- a8 Z9 R, \9 N; P  U* e     }) e7 ]: X6 X; H, g4 h
     //取第一个元素的信息, K, q# [" w: m) q
     /** g9 `+ P" M; Q- y
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)+ ]$ E4 w' }2 t+ }! c8 T
     {, O- \9 G4 Z# @- _% M
      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
2 t0 @: B. [2 w5 d      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);* n2 n9 w. p# M4 [  V
     }: _' P* f. s+ g# e$ \: E: i% {
     */* ~9 A4 W% r$ r7 K# y4 T
    //////////////////////////////////////////////////////////////////////////
: l* r! q6 C; o( u/ V- R! s8 J# {    break;
8 O" j% R7 H/ k. W) f, S   }
: ?  x2 M0 ]7 f% n* }: y6 r  } # A4 F& u5 X+ z3 i4 g) m6 ]
}
1 C2 ?5 L! Y( ?" ^" @' Um_wndMenu.SetVisible(FALSE);
4 K. H- K( h: U& k  h4 e! s5 c8 q; X1 t. a: v$ V% c
--------------------------------------------------------------------------------------------------------
, j4 B7 D7 [0 s7 A* ^4 g) S搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)6 s" f  k: Z3 w0 E4 f
{) s$ q9 E1 q2 B5 U
BaseMouseCursor();! }" S6 n  I- H4 f. s+ G' B' `
}
3 r3 O+ o0 Y# |在其下添加:( h- w4 D0 l0 O: s% o9 h
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)5 @5 U$ s6 g: @8 ?4 ]4 g8 ^2 c: b
{3 q, F$ l& u% q4 K# X1 h3 e" t: O
m_wndMenu.DeleteAllMenu();
1 X5 f8 }+ o8 K' o5 Bm_wndMenu.CreateMenu(this);5 U" [& Z5 v" J- k
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
& h. {0 s7 l- K/ N$ W9 i. \: s1 i- \# J2 x$ b
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))0 y: F7 w# n! D
{7 u$ K3 A+ x- q3 U7 u  n6 c& g
  //P以上级别才可以删除所有道具: P% k  C; e4 s. W9 S
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");7 T) n- p& [: g6 T4 C. G1 }
}
6 ]2 L7 Z. X+ A4 X  V+ t3 fm_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
( M; p" G* F! d' H! M6 qm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );: H" E# x, T- {+ W% e; r. [8 O% {& \6 d
m_wndMenu.SetFocus();
& H" }& [" T, g1 }5 |. j}4 u' t* E' _9 Q7 o, x  J8 o' l
------------------------------------------------------------------------------------------------------------
4 K$ }3 A4 v3 _. `+ \*************************. A- g) B, b' D) E; _7 `
WndField.h文件* Q, W  n2 G# j) G' r
*************************
* T& O; [$ x: ~* X9 V搜索:BOOL m_bReport;0 o# t5 U# E, B
其后添加:
8 ~' H- T/ A5 S# V0 `+ y) fCWndMenu m_wndMenu;
9 N  z7 ^, T" E搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);4 O" t2 i* L: B
其后添加:' B) P: `: b" q& N1 I1 {" K& D
virtual void OnRButtonUp(UINT nFlags, CPoint point);
5 S0 ^, W! Z1 ~" i
/ z( l7 O/ O5 [* k. \4 k( E  E2 ~
  v8 a# f, C* G+ J

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-13 10:18 , Processed in 0.076264 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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