飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1088

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1088
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
' s* z  n# x4 z- R6 c搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase ). I8 z  {' _& D
: R1 l0 S8 R  I) N6 `
struct sItem# `- d8 p0 x6 t0 P! q" h% K
{
/ A1 z; ?9 W5 m$ j0 U$ EDWORD dwId;
8 `1 X! U4 I& zDWORD dwKind2;
; F2 R- e: H8 R2 @3 U  CDWORD dwItemId;
8 c% `; S" H( v# w( cBYTE nIndex;
4 \5 e0 Y* @$ YsItem(){, a% l& t* X* G
  dwId = dwKind2 = dwItemId = nIndex = 0;
( z6 L* I4 ~1 A5 Y: s) p}
8 E( F( R: k- tbool operator < (const sItem p2)6 V' \" C- M2 p1 L2 F, O
{
0 Y9 \0 V: z1 b% m  if (dwKind2 == p2.dwKind2): e4 M- h# E9 u( ]7 o
  {
3 ?3 {6 S, T6 \- e9 ^: u, C9 Q   return dwItemId < p2.dwItemId;
4 }5 a9 P8 D$ U) |# C! e4 N  }else{
! U  E* }4 T  t3 q* m2 @! Y   return dwKind2 < p2.dwKind2;' ^4 D, s( l& f# J& |6 ~( K, {) q
  }! H: N4 t) P, ?: L' O* e
}$ M: j, p; f/ o4 _1 }
};( |/ k* h4 [% T9 F
class CInventorySort& g- T( c& }0 ]% N5 `$ `0 `
{" Z1 x& c, m9 E9 D  Y% O
public:
! f  a( o) ^  ZCInventorySort()5 h% @. F; ?4 ]6 h1 K# o( A1 T
{
4 U# ?7 h  r2 `7 G- P  m_dwPos = 0;
2 l, |8 m) z/ ^8 k8 \}
3 }+ }. C7 G4 O3 ], Y5 T/ E~CInventorySort(){}1 P3 U" B5 Y( ?1 d6 Y9 @+ D( b+ f
private:: C+ X9 D/ J4 Z
sItem m_Item[MAX_INVENTORY];//存放排序好的道具信息
4 [$ b; U8 q) q& u" |& `! b. U" F% ]2 vDWORD m_dwPos;
" i5 U! K: ]% D& d1 n. l/ @; [public:7 M% x$ E6 Z0 v0 u
void Add(BYTE nIndex), I4 g8 H( N* H: a' F8 d4 {: O) d
{8 i, o8 H2 S. P( q
  if (m_dwPos >= MAX_INVENTORY). k& U6 M# U' I9 M! ^  o
  {
* F& l  S# m& u- m   return;, t; ^5 V; k1 B4 f; \6 o& ?0 q
  }2 _3 q' X- s, }/ L! D3 B, Y
  m_Item[m_dwPos].nIndex = nIndex;$ m: a$ Y9 d" s7 k# b. \. h, l
  m_Item[m_dwPos].dwId = m_dwPos;
, L  {, ^5 y) L  H+ T* K) I  m_dwPos++;" L3 {5 n3 _+ V9 `+ K* B: s7 \7 G  e
}
$ E  I: [  B6 K  l3 GBYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列7 k, {- f0 j: Q! B
{
" \1 g- X; J$ C) B- w* T: s  for (int i=0;i<MAX_INVENTORY;i++)
0 b# Z* X0 H  J8 E& {% s4 T  {
' g* `3 p" o8 p0 \7 K: G1 S' E$ |! v   if (m_Item.dwId == dwId)
$ O; r) T9 w/ P; [5 C0 t& `! v   {- I9 g4 K# g5 Y5 B' C3 l
    return m_Item.nIndex;# N/ h# ]3 j5 L7 I
   }1 [6 G0 A! [* y  a
  }
3 q' n* ^, L$ w' A5 [' h, R, a; u0 q  return 255;
$ q2 `& n7 Y( T- t  R, R}: S; E0 s3 R4 F( e) ]0 j; @
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置3 M1 ]9 e, j! }% j5 \) q
{
2 N  e& Y6 N+ t) W$ s  BYTE nTmp = 0;# B9 p* b- j" p' Q4 |7 f
  bool bDest = false,bSrc = false;
5 `5 D' [0 S/ l9 E  T: q7 @4 o4 F( y  for (int i=0;i<MAX_INVENTORY;i++)7 D& t. s  B& ]( Q8 P. V& m
  {: D5 ?* Q, j7 R" t, _
   if (dwSrcId == m_Item.dwId); l- [% r+ u9 L7 ?& j: |
   {" a, j- k/ v9 C3 c: R+ K
    //id相等 则 改变对应的dest和src
0 D$ p* t( _' [  t( j    nTmp = m_Item.nIndex;
- S$ ^( K* Q5 a! E! A2 }    m_Item.nIndex = dest;0 `3 Q2 F! \+ V# a
   }
  H6 @( t5 _' @0 y1 D; {  }. }% ~; n% d& m
  //临时数据保存完毕,交换开始
0 N$ k) Z8 L" x" \  X: {, z  for (int i=0;i<MAX_INVENTORY;i++)8 i( G/ j( g1 i* i$ [3 ?$ y$ Z
  {# E& M- ^* R! n3 ^: s4 ~5 W7 d0 n7 R
   if (dest == m_Item.nIndex)! B: _* }/ K. t* i0 G; B0 o5 r
   {. h" \! d! u8 r' E+ r: A2 Q
    //id相等 则 改变对应的dest和src: P( s, F% t! t
    m_Item.nIndex = nTmp;1 V  W! u8 E, T8 x5 p
   }
& h- e" h% }- T: P& N/ V* l4 s  }
6 A9 C9 z) O" ?}1 e; _! A+ P; @2 T9 M. N# S; B
};& }  `" Z+ g' Y/ f& T# F( j  R+ @
-------------------------------------------------------------------------
" K) e. G) R' N依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ R* h) o! i" ]0 ~  h2 t9 f$ O) i1 y搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);+ E' ]+ B8 W& @$ o+ z
紧靠其上添加:
) n+ [# S& u; n9 R# Kif( pWndBase == &m_wndMenu )
% y) C, z* d) |{- r5 y7 {9 S/ A' _, R2 G/ }, E$ R
  switch( nID )
5 _% [+ ^1 O. J, ?; S' w  {1 G8 {! R7 z5 y$ H! e4 v+ `1 d
  case 2:
/ J+ a! k+ J5 n* h! F, {   {9 ]$ \6 y: ]- T! l4 U$ H
    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);
/ t* c7 p  _# F% n3 \3 ]    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
6 x- q7 n! K5 q, [2 [    {
. v- I) P+ t* _1 O- _1 u) v     break;6 {; Z. o# H( P8 N0 P( j, K; v
    }
# S- ]& J( d, t    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
: c1 \; d# f! j  C1 \. k* O: M% E    {
  v5 B0 K/ w' e4 |- B' l     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
6 Y# F" o, W# p& x# v/ ^" g& O     if( !pItemElem )
5 n: G0 b! C  ^      continue;: z  u1 a# Z; K0 j" |% Z
     if(pItemElem->GetExtra() > 0)
& a4 G1 c! L9 X      continue;
$ C- m  U! e' z0 j9 R     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) )
: M+ k5 |# A! N- M      continue;8 t1 S/ B- z/ u7 ?+ @- q: ]. a: t
     if( g_pPlayer->IsUsing( pItemElem ) )3 y3 \# L" W4 I' F" W0 ]. m/ n$ _
      continue;; |1 F) D& }4 G6 z6 v# L
     if( pItemElem->IsUndestructable() == TRUE )$ X2 {% {: x9 r3 j5 Q* `2 y
     {: l6 i5 W" W1 z" n# l
      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );9 L$ Q7 ~; @$ j9 W) q- p& f! D
      continue;
8 R3 u: Q% q+ Q# O$ P- K     }
6 c% f  h3 r4 R, F, y( J+ T     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);8 y: G* y; c; @  ~
    }3 G1 X& y& j  ]4 Z
    break;
. n) e! s6 B( U5 P  o: b9 `2 P   }
' z. S% d- f% O7 E  n# c  case 1:1 M, P; V; ~5 R2 V6 Z4 p9 ?
   {
% o7 I4 Q4 x5 x0 ^, e5 z& a6 O    //整理背包0 N) t0 G; i0 U$ l% K. O: z) u
    //////////////////////////////////////////////////////////////////////////
' u+ ?2 N0 ^. z" ~    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );
: b! W% d4 S2 j7 _1 w3 I    //////////////////////////////////////////////////////////////////////////6 o) }6 U5 j- f6 h6 Q& `
    //////////////////////////////////////////////////////////////////////////
# c6 \+ |' Z  T/ _+ h6 }( u    CInventorySort* pInvSort = new CInventorySort;
$ E& t( t( m: V7 K9 X( j8 k7 j    vector <sItem> vItem;
' e3 V, O1 P- J, N% g    vItem.resize(MAX_INVENTORY);//初始化大小
' d" G" S# y5 Q& h) K  d; R, v     //////////////////////////////////////////////////////////////////////////7 w5 E/ j, F  S+ p* \" y+ O& X- r
     //填充数据: K% i$ E+ t* Z$ O/ m
     for (int i=0;i<MAX_INVENTORY;i++)
/ V7 g% ]) v! n8 F     {' ?; f2 {+ F, B- m1 L
      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);. i( u* H% ^6 d% s: c
      if (!pItemElem)
9 \% R. `7 F( d6 T      {1 `) z+ a- U6 s& ~" x2 M6 ~: f2 E+ I3 O
       vItem.dwKind2 = 0xffffffff;1 G& W& }' V: Z" Z& L- X
       vItem.dwItemId = 0xffffffff;, _) `2 F: E0 o/ {+ k. X
       vItem.nIndex = i;& L8 P6 x/ G6 x3 }5 m* N& ~
      }else {" @! J% r" D/ k, B8 ~% q6 B
       ItemProp* pProp = pItemElem->GetProp();
- S: M8 _: x+ M9 l% `& Z8 _       vItem.dwKind2 = pProp->dwItemKind2;
3 N  O; A/ v+ `+ h) L% `       vItem.dwItemId = pItemElem->m_dwItemId;
2 C0 S* A5 j( M3 t       vItem.nIndex = i;6 k; }, n/ R7 Y' H2 q$ q3 h1 O
      }7 d0 h6 W9 Q- y  X; i6 o8 m. Q
      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
% @0 S- \: ?& L% T1 o     }
) j, L: t3 b" K5 o( C     //////////////////////////////////////////////////////////////////////////
6 V" i) C1 e# W/ P$ T     sort(vItem.begin(),vItem.end());//排序
& V" C- R( h$ S5 U) j     //////////////////////////////////////////////////////////////////////////
. O9 C1 i2 b; g2 F+ M     //交换9 [( J  u2 E0 ~" T: {
     for (size_t i=0;i<vItem.size();i++): S+ Z/ t0 K' T. S- a/ n, T8 Y
     {( A8 X+ ^. v/ v; `  r! ]9 g* S* w
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);# f( d7 c+ f9 l/ ]: o0 u6 X
      pInvSort->Add(vItem.nIndex);: K2 @' g* u- y3 z! p
     }9 U& \' E/ v) m2 j7 X' P
     BYTE nDestPos = 0;! E7 S+ C, _; r& U- y0 E5 i
     for (int i=0;i<MAX_INVENTORY;i++)" X& S+ x6 Y0 W. v
     {
9 s6 S" `3 Z, |" e9 ?      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
( b9 `9 D) `  k. P/ A      if (pItemElem)
, ~; B/ o3 u6 }5 M& ~4 V3 V      {; a- Q1 |6 t# l" l; V+ M
       if (IsUsingItem(pItemElem)). F$ F* J, j5 H! L9 g" |& e
       {
! p1 z2 H  ~9 a        //这个位置无法放
, o! F" e2 j) F0 g9 l7 n2 I* U        nDestPos++;3 Q( _" G8 S3 \5 B; z
       }
: F# J1 Q7 r* D6 w' E( r      }0 ~8 n/ @- h3 S) E1 X! Z( B6 {
      BYTE nSrc = pInvSort->GetItemSrc(i);
; Y3 C4 ]2 m% C( A      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);* K* Q% ~1 `6 j" W% `) i
      if (pItemElem). S7 p) ~# Q8 ~' h0 r" E4 I
      {" T: b$ S1 z7 h
       if (IsUsingItem(pItemElem))
9 h) {4 T6 B0 z1 G1 J" b       {4 d, b& r6 c5 A( T1 x8 o* |
        //这个道具无法移动,跳过
# w3 N) B% Q  |5 i: D& Q        continue;
0 _# h+ i9 Z( f8 Q: l- G6 Y       }* K) X) C  J- g" `6 E, ?3 Z
      }else{
4 p& L+ v8 R3 E2 C       //空位置 不用动
+ ]& |( ~" U4 p. _( G1 v       continue;7 c  {3 q2 g. W$ \: e% f
      }/ u6 P* `9 R, `
      //////////////////////////////////////////////////////////////////////////6 `  n9 E3 t; ?  N+ u
      //开始移动7 \* R. g: d, @' \# t
      if (nSrc == nDestPos)+ {$ ^' m& S/ F, B
      {
5 F! U3 E$ w! e; Z- }# C       //原地不动/ f8 R% M6 y, x; v
       nDestPos++;) }& s9 U) Z- a# v6 u- q+ m2 ~
       continue;
0 s9 ^- |( [- x& x+ y9 `8 ~      }( |$ @3 b: O3 v8 _9 r! e% _6 a
      pInvSort->MoveItem(i,nDestPos);
  c+ b7 Y; u5 P9 O      g_DPlay.SendMoveItem(0,nSrc,nDestPos);) D; A, N# X7 `1 Q5 j
      Sleep(5);; x. A& t0 X. w  x/ A3 x
      //Error("移动 - %d->%d",nSrc,nDestPos);
; ~$ e; t2 n- y" \3 ?7 m      nDestPos++;: S1 y! z. Z) @* F1 }; ^/ P
     }
$ F7 q3 X# q; \# t' y: u     //取第一个元素的信息' [7 c; a2 ~1 x
     /*0 z6 y8 ^+ E6 N0 R6 p
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
. G2 ]/ h/ w5 D" W     {
  q( b7 e# F7 U; w  R9 y. k% f      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);  `8 m. r5 \% x6 a& Z
      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);- C0 A0 e  d1 n* `& I0 }& ^. H3 O
     }  M  u9 l4 J' D; T: a1 J) x* O+ r
     */6 o3 N: A' y' a! s8 O, [7 R
    //////////////////////////////////////////////////////////////////////////
2 t& f$ _1 I. D# K  g" a; E    break;
, E% }4 L7 Y  W5 \   }  B: G) V2 v% Z7 Y! c* F
  } ' h; s4 k. u7 Z' c& W
}3 O  P7 T" H: q; P1 ~& ?! Z
m_wndMenu.SetVisible(FALSE);# c9 f' r7 D$ _5 ]% J* B
! r1 [. u/ q9 d. B& s
--------------------------------------------------------------------------------------------------------
5 Y3 B  D0 t' W- }1 A  b搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)+ p$ C/ U& U2 G: E
{
. A1 O8 s! y; v! @" tBaseMouseCursor();
0 E6 o6 @1 G# g' G/ p+ ?, f# z4 f}5 F. ]- l7 K2 F+ C, i
在其下添加:
0 k4 p, }0 k2 |- O) @. s& Cvoid CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)8 F+ D! N, N$ y& F
{' q. v4 f$ N! N' ?4 [1 j
m_wndMenu.DeleteAllMenu();
* F9 I# P6 X% o$ ^m_wndMenu.CreateMenu(this);
2 [6 e3 E* P" K0 {* Z* Em_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");! y; l1 E8 S3 j& t7 {
, b) n( J& t+ E) m* w
if (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
- `/ \; J' C4 V5 m& a8 @{
; s2 ?/ g6 E5 p  //P以上级别才可以删除所有道具2 C5 K6 M  U0 ~( }8 p0 J4 _
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");
  l+ y0 W) |5 w& ?, |- A}, ], p: c- ?! E6 e) w/ k
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
8 E7 }2 ]/ _# T* f: b. fm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
- b' x9 E  D/ W6 ~m_wndMenu.SetFocus();
/ z0 n3 `. c6 j  v2 Y. ~}: c- E* g6 o* W$ I# d3 n
------------------------------------------------------------------------------------------------------------% h* L* M  ?' h
*************************; O* ^6 Y& t8 Q0 B" R
WndField.h文件
9 Y7 Z7 `5 V1 p& M) \( G*************************8 ~. {/ ]' ~7 h1 B7 N
搜索:BOOL m_bReport;
1 t+ _$ T2 n8 h2 B4 T$ o, D其后添加:
, G- p" W  L8 ]' |% M7 d) R$ pCWndMenu m_wndMenu;
4 }, t. [1 d  ?. s搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);' L" [  P, Z( w5 |+ W- p
其后添加:
" P$ L$ J6 D: q! rvirtual void OnRButtonUp(UINT nFlags, CPoint point);) Z2 N- }5 k. m& P
6 ?' q& O- W: c! h
2 G& f! X1 K/ @0 T- Z# {/ M9 j

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-24 21:13 , Processed in 0.063255 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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