飞飞世界论坛

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

一键整理背包

[复制链接]

197

主题

203

帖子

1086

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1086
QQ
跳转到指定楼层
楼主
发表于 2016-1-10 03:44:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
源文件中_Interface文件夹下WndField.cpp文件
8 x3 E. A, h, [7 d, M搜索:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )  p* u, G1 v; H$ j% X: q

) W3 r* `: P9 gstruct sItem$ b, {3 J4 s: p3 o
{- I4 T/ d( h+ R- ^( ~4 f
DWORD dwId;
# L" V/ Y* g0 ODWORD dwKind2;
. G  b- d3 N7 e0 {/ NDWORD dwItemId;: ~& A& F  |2 m/ o
BYTE nIndex;
3 ~1 Z5 i+ ~- B5 P" U" {sItem(){" _& p2 X  n* L# ~' ?6 n
  dwId = dwKind2 = dwItemId = nIndex = 0;" c5 t% t9 f2 `" B  c. x
}
/ {  p# _' E: C2 p7 X. ?& R8 Nbool operator < (const sItem p2). q4 L8 H* N) X: p
{
) a' d& e' a; b7 W) D; j4 g. h  if (dwKind2 == p2.dwKind2)% y. R. _7 U* }* c8 h5 k( r( R2 w
  {( x& o4 ?2 {# {
   return dwItemId < p2.dwItemId;
  `$ r/ _4 K2 ]5 o' y  p! t  }else{
0 H$ p  n" S. u; \   return dwKind2 < p2.dwKind2;
4 Q1 Y  b& n! `. d  }# S' ~$ e# e4 e( w: [
}/ b' [6 l; C8 x$ ^  u* K- D
};8 q/ q/ c+ u( K) E/ T) |
class CInventorySort2 J# g& q$ v% P; k7 s1 o
{
2 ]/ y9 N9 i+ F5 Cpublic:
8 S* h- x! W( H: Q0 V8 ?CInventorySort()
! {* X8 n( d; k- m5 ~+ ]5 q1 k{
) N6 `9 \" a/ m5 N6 ^, m  m_dwPos = 0;& D* m% W' {( M8 E+ q. x' Z/ X
}
1 r% z1 G9 ~8 R$ i" v~CInventorySort(){}
! n8 W2 w0 q- }  u2 kprivate:
! c* }2 }" I; O9 j" h( k; gsItem m_Item[MAX_INVENTORY];//存放排序好的道具信息4 y. R; {# Q, m9 k
DWORD m_dwPos;
+ |. X3 n' u9 P2 d  f7 n# ^public:4 Q' B8 |( J/ l# q1 P, L
void Add(BYTE nIndex)# M0 J( w% Y( V) D" o
{
/ [/ W5 w0 }' W9 N* ?3 R: z  if (m_dwPos >= MAX_INVENTORY), e# Y* j) U5 U2 }  ]+ x2 B( H
  {
1 L$ g& E7 V0 G" L3 \: W, _   return;
9 M$ i6 z. x" L4 R9 X4 x9 `  }! S8 V0 l0 [/ F, w; [  U: ?
  m_Item[m_dwPos].nIndex = nIndex;& e! b5 ~6 b/ M+ W. m, o
  m_Item[m_dwPos].dwId = m_dwPos;
. F" m6 ~8 o# }- N2 a  m_dwPos++;
: n+ S4 ~" e- r8 j  d  v}
* I3 O/ _( }; f6 M% }BYTE GetItemSrc(DWORD dwId)//Id从0到最大值排列% U& B# ]' A, r8 R# ]7 u$ \
{* w2 K* m, f8 J/ V, \3 ?' h7 r
  for (int i=0;i<MAX_INVENTORY;i++)
& J5 Q& Z* S4 P  {
; y8 o' l4 K3 d1 p* L. O- F& q" S6 Q. |   if (m_Item.dwId == dwId), Y, m9 d" V; Z4 y: ?+ B5 I
   {
: {. E, t6 b0 ?* i# x    return m_Item.nIndex;
6 n  P+ `( [1 e: `% s* U5 h   }
6 D! K1 K8 r. K1 Y; c: c4 E  }: N0 p' Q2 p( j0 n: }
  return 255;; g. S) q; f4 B( X
}, c, _. }8 P) V% d2 n% i
void MoveItem(DWORD dwSrcId,BYTE dest)//移动道具位置
, N7 ?) P- [. k. N0 |1 d{
$ L. A- t9 S  Y& ?! c9 C7 r  BYTE nTmp = 0;4 O& V/ c. h7 J; W8 o
  bool bDest = false,bSrc = false;
9 @9 V! R7 U  A7 e- Y; j7 z  for (int i=0;i<MAX_INVENTORY;i++)4 N, n7 w9 E- b$ K
  {# |( e1 v7 Y+ w: O; K
   if (dwSrcId == m_Item.dwId)
) T: j  w: K- @! Z   {
' D. `3 r' g+ c    //id相等 则 改变对应的dest和src! f9 k. d. i) m$ y& a
    nTmp = m_Item.nIndex;
/ w! }: s$ u$ ?4 a    m_Item.nIndex = dest;
# @! f( ], A. x7 E$ D7 D   }
4 B. A2 j! r9 b# ~  }
3 j6 n5 I$ }1 x3 C+ j! `  h  //临时数据保存完毕,交换开始
, R7 z4 Q+ G0 H3 _! k  for (int i=0;i<MAX_INVENTORY;i++)$ g7 b4 p$ t) P3 \( }
  {) A2 T% V# Z. [9 U
   if (dest == m_Item.nIndex)0 Y. \4 I3 k$ }# U4 T
   {* t  c) }  V+ B: H4 n( e# l. d
    //id相等 则 改变对应的dest和src
+ R: f- }& n( Z. `0 @7 H- @9 @: g; m    m_Item.nIndex = nTmp;, w6 f3 A0 f* R+ E9 {' o& n
   }
2 M6 Q0 K5 J' [" s  }1 H: H( j. O. G: Y8 F  [
}
1 J* D4 T! B; `6 e};
+ O" m! R4 J* o" R* K-------------------------------------------------------------------------
7 n, G! ~) }' B' d0 h8 I: S依然在函数体:BOOL CWndInventory::OnCommand( UINT nID, DWORD dwMessage, CWndBase* pWndBase )
+ s/ S! q. x' \* U7 F$ e) h搜索:return CWndNeuz::OnCommand(nID,dwMessage,pWndBase);+ B5 {7 f( h( e& d5 {2 `
紧靠其上添加:
5 l, z; H% B. Z% ^" nif( pWndBase == &m_wndMenu )  }4 {, x8 Z' {1 f3 N
{- I0 W- M% a- M& r5 ~3 h" P5 x/ ?2 C
  switch( nID )
+ ]: ?, m, z' u0 e9 o- q, N  {
) b" W' E2 n' b: b) E/ F  case 2:' Y3 p+ _' u" C3 f' ~
   {
+ Y+ }: q, S7 X; Z/ P    //g_WndMng.OpenMessageBox("确定清空整个背包吗?",MB_OKCANCEL);; R3 T3 _2 t* S0 r$ w! d
    if(!g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))
0 d7 Y. P$ n1 b; H9 k    {; m" I" L0 r, S( }# b& ^: G5 e: Y
     break;) }" \) f0 F5 w! e  f# e$ J
    }1 `1 h$ c+ W7 w' g! L
    for (int i=0;i<g_pPlayer->m_Inventory.GetSize();i++)
  C  ]( }9 _3 ?3 d( a9 z    {, J# X  Q( I5 Q/ E; b
     CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);* ?$ n# D9 T7 n& B( W# B+ d$ J$ ]
     if( !pItemElem )
5 r: i" r$ M: W. A6 ^: |& r      continue;9 a$ C7 `: K5 a0 V: y* }6 N
     if(pItemElem->GetExtra() > 0)
5 q) t! L" X$ v5 w8 g3 I9 O      continue;
2 X) X) J8 Y! j/ Z6 L5 I     if( g_pPlayer->m_Inventory.IsEquip( pItemElem->m_dwObjId ) ) 4 t" \8 g! \5 a7 s
      continue;: D! t, y- g( J8 l  Q) x
     if( g_pPlayer->IsUsing( pItemElem ) )
; U: F5 N3 O: c      continue;
+ ]7 h4 l' L( x# w     if( pItemElem->IsUndestructable() == TRUE )
* p2 ^) I" W& c$ x" k8 w     {
( f8 |5 k6 k' \; v  m8 T) i      g_WndMng.PutString( prj.GetText( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ), NULL, prj.GetTextColor( TID_GAME_ERROR_UNDESTRUCTABLE_ITEM ) );
. ^4 A+ R8 t5 v# V6 h      continue;% [6 I- P7 o6 W
     }4 k; j1 r! U7 V$ G  ^
     g_DPlay.SendRemoveItem( pItemElem, pItemElem->m_nItemNum);
8 e0 g$ o4 @' o    }8 S7 D" }& o4 W9 d# b4 \
    break;- H# N1 o% J, Y# }8 }  ~3 [  @9 ~
   }
: y! @! m( N# c  case 1:; ~' h) D; d. W$ ?; W, `
   {
% w% y! F# _; J; C2 I& j+ ?' Z+ E    //整理背包
( i8 R. C6 z4 ^2 b1 n    //////////////////////////////////////////////////////////////////////////, b) ^# ?2 u- ^" K4 p3 m2 B
    //g_DPlay.SendMoveItem( 0, (BYTE)( pShortcut->m_dwIndex ), (BYTE)( (DWORD)nDstIndex ) );5 O: h8 c* J" Q
    //////////////////////////////////////////////////////////////////////////
. N- b& d  o0 [    //////////////////////////////////////////////////////////////////////////  \/ o% z* g- L+ t0 G8 W3 P1 ~# y( T
    CInventorySort* pInvSort = new CInventorySort;
+ p( G% d8 I. t; d8 }    vector <sItem> vItem;: e# U9 Y1 M0 \; k
    vItem.resize(MAX_INVENTORY);//初始化大小
* e+ Q8 ~1 q  J. c- C     //////////////////////////////////////////////////////////////////////////7 \5 p5 m  l4 r. I
     //填充数据6 H" Q' Q# x9 P' U0 O
     for (int i=0;i<MAX_INVENTORY;i++), R  q0 L! ?. a
     {
6 p/ h* U: B6 b9 u" n      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(i);
; u- `+ t' A) A2 F; j  k; {      if (!pItemElem)
. A) i5 l- r* Z      {
  e: d  N: M: W4 h' t% H/ P       vItem.dwKind2 = 0xffffffff;" R1 c3 l/ y3 H6 ^% @. q/ f
       vItem.dwItemId = 0xffffffff;
% v3 D4 T* |. r0 ]# D       vItem.nIndex = i;
) A* U  R! }7 U9 D& i4 O$ x      }else {- V4 \, S4 m1 f+ z; n
       ItemProp* pProp = pItemElem->GetProp();$ _; k2 p* |5 N1 I  v5 M
       vItem.dwKind2 = pProp->dwItemKind2;2 k! W7 `9 g5 ?0 }2 |3 e5 C
       vItem.dwItemId = pItemElem->m_dwItemId;9 D9 }/ P! `0 q% k) [
       vItem.nIndex = i;
& K% G7 Z1 K* m* K. [      }
' U3 d- T  {1 P" n      //Error("排序前 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
' R, ?* g/ a" B3 s" Z7 a     }
% c$ j6 N  J* M) J     //////////////////////////////////////////////////////////////////////////: w( s) g; R  A2 `* `7 N# I
     sort(vItem.begin(),vItem.end());//排序+ ?- ^5 I, v. d; ^2 m& @
     //////////////////////////////////////////////////////////////////////////2 {3 z: @! K; x9 H+ z; ~1 \) V
     //交换$ |$ V, y& T1 Y3 i# r. I
     for (size_t i=0;i<vItem.size();i++)
6 j' [9 z' d5 x. G     {! g( d# i- M! I
      //Error("排序后 - nIndex:%d,Kind2:%d,ItemId:%d",vItem.nIndex,vItem.dwKind2,vItem.dwItemId);
. {8 {$ r( Y% y, D4 n% W8 d      pInvSort->Add(vItem.nIndex);1 o2 @9 s9 u1 F9 c7 W
     }1 Q5 w0 w: n7 v  \1 i  ~9 X
     BYTE nDestPos = 0;, ?% c) A; y" o4 [; X; b  X
     for (int i=0;i<MAX_INVENTORY;i++)  ~  f" Q, N$ w  c' g0 l: g
     {
' l7 a4 U5 a1 D$ K5 {      CItemElem* pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nDestPos);
+ A$ e% \9 P1 W$ V- q; _      if (pItemElem)! z* \+ g! n, g3 v
      {- H3 q+ K$ I& w" |# R: \
       if (IsUsingItem(pItemElem))
( ~2 \$ B7 Q6 h' N9 N       {3 i' h2 ]0 w- _" x
        //这个位置无法放! w3 O" h3 Q- x) {; ?
        nDestPos++;
8 p# r# ^" x. O: m1 F7 ~       }: o# G8 u4 j0 R
      }
* }' j, R& W* r+ h* o$ s9 g! G      BYTE nSrc = pInvSort->GetItemSrc(i);5 ~% A% s0 O( S; T" K' O
      pItemElem = (CItemElem*)g_pPlayer->m_Inventory.GetAt(nSrc);
- C) |! a4 I4 G6 e3 q$ X4 G% _6 I      if (pItemElem)4 N: z$ J) n! H3 U
      {) s5 @7 O+ B$ Z% p" X5 {0 C/ b' x
       if (IsUsingItem(pItemElem))
4 R! r9 i( _! }* C       {
7 Y. M& b" g8 [* H( i        //这个道具无法移动,跳过
: c8 [: ^; K; R5 ^        continue;) b' ?# E: ]& W! L
       }& N' K+ q7 J5 v9 \' _
      }else{2 E& j1 p# t. B& Y9 h
       //空位置 不用动
- s& \5 t* Y# C, m# C- T/ \       continue;
7 H5 y! f1 ~( u( W9 ]# i, e      }9 k7 x2 l  t1 Z5 S, J
      //////////////////////////////////////////////////////////////////////////  k( a; O, G; |5 d
      //开始移动" N$ M0 l4 q( G- d# T& a/ m
      if (nSrc == nDestPos): R1 I- Q+ |' y
      {( q! {7 Q4 ?" t/ E( s. o
       //原地不动
8 Y, N3 w" c- U8 {# B, ]       nDestPos++;$ g: v3 X- Z6 R9 X
       continue;
5 m# q) t$ u( C1 U      }4 q! i8 L* k" T$ j6 ?6 F- `  [
      pInvSort->MoveItem(i,nDestPos);; Y, ^( Q- ^) J5 J
      g_DPlay.SendMoveItem(0,nSrc,nDestPos);! k, i) p' p, X, _, l2 H8 J
      Sleep(5);7 d: i/ l/ r3 X" w) A
      //Error("移动 - %d->%d",nSrc,nDestPos);9 [1 R# f$ Z+ Z3 Z3 r# I: k: }9 T
      nDestPos++;# L  e8 d. y2 v, U2 G% M
     }2 l& n! D3 x1 q# ^
     //取第一个元素的信息
+ \( c/ ~% u7 j1 v  l: \     /*  X$ Y3 j8 _1 e3 [# A. l
     if (vItem[0].dwItemId > 0 && vItem[0].dwItemId < 0xffffffff)
: q$ K( h8 q* X     {
$ G- C. V1 a  H      Error("Move - From:%d,To:%d",vItem[0].nIndex,x);
8 G' {% s& X# p% Q) X/ S5 l9 E      g_DPlay.SendMoveItem(0,(BYTE)vItem[0].nIndex,(BYTE)x);
4 o, L2 }3 J9 P+ A     }
& o$ p3 E% ]( ]5 j5 Y. A     */; q+ m+ [: ?+ T! P9 [$ d7 c1 h
    //////////////////////////////////////////////////////////////////////////
1 i' a) J$ n+ o) Z- \* w. F* V    break;
, G! V+ M0 e1 [* U/ \   }( f" R4 q2 l' k/ E8 a! x
  } 1 Z% N' M* c+ y0 J: V; p) M( I
}: F" S% @  g& M% m
m_wndMenu.SetVisible(FALSE);! m+ _% X/ S$ s; o# y0 x- M( x
$ f# A! v- D  s
--------------------------------------------------------------------------------------------------------* ]% Q$ I& y# B3 D7 Q+ }
搜索:void CWndInventory::OnRButtonDown(UINT nFlags, CPoint point)
& Y: I8 j; |( m9 b: m2 x{
3 v/ _* y9 w. kBaseMouseCursor();6 M2 ]7 G/ q" ?& G" n
}$ K! r, X; @# P3 A4 Y2 G1 @
在其下添加:+ j+ X1 ]" a* d, G' |  p
void CWndInventory::OnRButtonUp(UINT nFlags, CPoint point)
5 N- H6 i# t) i0 M( m  X& `{7 l& w+ A8 s2 W- U9 c. Y9 W
m_wndMenu.DeleteAllMenu();
6 C9 _- j/ X* T5 b; @- y2 lm_wndMenu.CreateMenu(this);* T& S1 `' N9 H: C
m_wndMenu.AppendMenu(0,1,(LPCTSTR)"整理背包");
/ C4 f6 T4 y: h$ l) s  {9 b
: d$ B4 v+ t2 r. hif (g_pPlayer->IsAuthHigher(AUTH_ADMINISTRATOR))7 E9 ]- b7 G: U
{1 S7 U! P/ M& _- v% q% w
  //P以上级别才可以删除所有道具/ c2 z& {7 e# [. e
  m_wndMenu.AppendMenu( 0, 2,(LPCTSTR)"Clear");4 A6 L* w9 |% \
}2 B. ?* ^7 [* d& M" |, r; l
m_wndMenu.Move(CPoint( m_rectCurrentWindow.left, m_rectCurrentWindow.top ) + point );
. q% e+ f8 e2 F, L! Gm_wndMenu.SetVisible( TRUE );//!m_wndMenuMover.IsVisible() );
6 R5 v# S- X2 Y4 s) t4 `0 Fm_wndMenu.SetFocus();% e2 Z0 o! L- t$ k# C4 c( V
}
3 y0 j% [9 y% R% E7 y. t0 F------------------------------------------------------------------------------------------------------------/ N4 a; d; E' W& a
*************************
4 P3 q9 j5 ?! V2 s  m5 cWndField.h文件- \* E+ P! `) u# [- L
*************************
$ T& X1 y$ }3 ~. q搜索:BOOL m_bReport;
9 E# J) M8 [: ]$ {" U其后添加:. j2 _& @' b5 a2 u4 q- }" R& S0 B5 `8 p
CWndMenu m_wndMenu;
3 A6 o$ n8 D/ R搜索:virtual void OnRButtonDown(UINT nFlags, CPoint point);
$ u, L8 b0 F/ t  ~其后添加:
5 s7 w" \: R- F$ [virtual void OnRButtonUp(UINT nFlags, CPoint point);$ L+ J9 V7 Y3 m& b* [- @) @; P/ X
9 S' W- N( c; n
) ]" I# t! ~7 Q& ~; V3 B

相关帖子

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-13 05:07 , Processed in 0.064627 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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