📄 menunetwork.cpp
字号:
#include "stdafx.h"
#include <ddraw.h>
#include "Hangul.h"
#include "dragon.h"
#include "SmallMenuSet.h"
#include "Menu.h"
#include "SmallMenu.h"
#include "Hong_Sprite.h"
#include "stdio.h"
#include "directsound.h"
#include "directinput.h"
#include "Char.h"
#include "Hong_Sub.h"
#include "Effect.h"
#include "map.h"
#include "tool.h"
#include "MenuSet.h"
#include "convert565to555.h"
#include "Math.h"
#include "skill.h"
#include "menunetwork.h"
#include "CharDataTable.h"
#include "gameproc.h"
#include "kh_cpp.h"
#include "chat.h"
#include "item.h"
#include "ExchangeMgr.h"
#include "Battle.h"
using namespace battle;
int g_iScenarioOn = 0;
extern NPC_INFO g_infNpc[MAX_CHARACTER_SPRITE_]; // CSD-030419
extern void SendReCallItemFromServer(int type);
void SendItemSell( int item_pos, int store_id )
{
t_packet packet;
packet.h.header.type = CMD_ITEM_SELL_REQ;
packet.u.client_item_sell.store_id = (short int) store_id;
packet.u.client_item_sell.item_position = (short int) item_pos;
packet.h.header.size = sizeof( t_client_item_sell );
QueuePacket( &packet, 1 );
}
void SendItemRepair( int item_pos, int store_id )
{
t_packet packet;
packet.h.header.type = CMD_ITEMREPAIR_REQ;
packet.u.client_item_sell.store_id = (short int) store_id;
packet.u.client_item_sell.item_position = (short int) item_pos;
packet.h.header.size = sizeof( t_client_item_sell );
QueuePacket( &packet, 1 );
}
void SendItemBuy( int num, int inv_pos, int store_id )
{
t_packet packet;
packet.h.header.type = CMD_ITEM_BUY_REQ;
packet.u.client_item_sell.store_id = (short int) store_id;
packet.u.client_item_buy.item_no = (short int) num;
packet.u.client_item_buy.inv_position = (short int) inv_pos;
packet.h.header.size = sizeof( t_client_item_buy );
QueuePacket( &packet, 1 );
}
void SendReCallItemFromServer( int type )
{
t_packet packet;
{
packet.h.header.type = type;
packet.h.header.size = 0;
}
QueuePacket( &packet, 1 );
}
void RecvPublicNoticeTitle( t_server_menu_message_title *p )
{
if( p->no )
{
int para = (p->no-1) % 10;
c_BbsTitle[para].SetBbsTitle( p->no, p->date, (char *)p->name, p->title ); // bbs 悸泼
}
}
void ReqMessageTitle( int type, int count )
{
t_packet packet;
int t;
switch( type )
{
case MN_TOWNHALL_PUBLICNOTICE : t = CMD_PUBLIC_NOTICE_TITLE_REQ ; break;
case MN_TOWNHALL_FORUM : t = CMD_FORUM_TITLE_REQ ; break;
case MN_TOWNHALL_EVENT : t = CMD_EVENT_TITLE_REQ ; break;
case MN_TOWNHALL_RANK1 : t = CMD_RANK_TITLE_REQ ; break;
default : return;
}
packet.h.header.type = t;
{
packet.u.kein.req_bbs_title.count = count;
}
packet.h.header.size = sizeof( k_req_bbs_title );
QueuePacket( &packet, 1 );
}
void ReqMessageBbs( int type, int count )
{
t_packet packet;
int t;
switch( type )
{
case MN_TOWNHALL_PUBLICNOTICE : t = CMD_PUBLIC_NOTICE_BBS_REQ ; break;
case MN_TOWNHALL_FORUM : t = CMD_FORUM_BBS_REQ ; break;
case MN_TOWNHALL_EVENT : t = CMD_EVENT_BBS_REQ ; break;
case MN_TOWNHALL_RANK1 : t = CMD_RANK_BBS_REQ ; break;
default : return;
}
packet.h.header.type = t;
{
packet.u.kein.req_bbs_title.count = count;
}
packet.h.header.size = sizeof( k_req_bbs_title );
QueuePacket( &packet, 1 );
}
void ReqCharList( )
{
t_packet packet;
packet.h.header.type = CMD_RESEND_CHARLIST;
packet.h.header.size = 0;
QueuePacket( &packet, 1 );
}
void RecvCharInfomation( t_server_user_db_data *p )
{
SCharacter &ch = SCharacterData;
ch.nCharacterHP = p->nLife;
ch.nCharacterMAXHP = p->nMaxHp;
ch.nCharacterMP = p->nMana;
ch.nCharacterMAXMP = p->nMaxMp;
ch.nCharacterSP = p->nHungry;
ch.nCharacterMAXSP = p->nMaxHungry;
// 瓷仿摹 眠啊 ######################################################
for( int a=0; a<11; a++ )
ch.nCharacterAbility[a] = p->Avility[a];
ch.nMoney = p->money;
ch.nLevel = p->lev;
ch.nExp = p->exp;
ch.nCharacterData[GENDER] = p->Attr[0];
ch.nCharacterData[FACE] = p->Attr[1];
//ch.nCharacterData[ARIGEMENT] = p->Attr[2]; THAI2 YGI
ch.nCharacterData[CLASS] = p->Attr[3];
ch.nCharacterData[SPELL] = p->Attr[4];
ch.nCharacterData[TACTICS_WOMAN]=p->Attr[5];
ch.nCharacterData[TACTICS_MAN] = p->Attr[5];
ch.condition = p->condition;
// #################################################################
}
void SendShowItemOfOtherCh( int ch_id )
{
t_packet packet;
packet.h.header.type = CMD_OTHER_CH_INV;
{
packet.u.kein.client_other_ch_inv.other_ch = ch_id;
}
packet.h.header.size = sizeof( kein_client_other_ch_inv );
QueuePacket( &packet, 1 );
You.id = ch_id;
}
//<soto-tai
void RecvOtherChInv( kein_server_other_ch_inv *inv )
{
int count = inv->item_count;
memset( You.inv, 0, sizeof(ItemAttr) * OTHER_INV_MAX );
for( int a=0; a<count; a++ )
You.inv[a] = inv->item[a];
fRMoveMenu = MM_ITEM_OPEN ;
nItemOther = MN_CHARACTER_ITEM;
You.id = inv->target_id;
}
//>soto-tai
void SendDivideItem( K_ITEM *item, int much )
{
t_packet packet;
packet.h.header.type = CMD_DIVIDE_ITEM;
{
packet.u.kein.item_attr_pos.item_attr = item->item_attr;
packet.u.kein.item_attr_pos.item_pos = item->item_pos;
packet.u.kein.item_attr_pos.much = much;
}
packet.h.header.size = sizeof( kein_item_attr_pos );
QueuePacket( &packet, 1 );
}
void SendGenrateItemByTool( k_client_create_item p )
{
t_packet packet;
packet.h.header.type = CMD_CREATE_ITEM;
{
packet.u.kein.client_create_item = p;
}
packet.h.header.size = sizeof( k_client_create_item );
QueuePacket( &packet, 1 );
}
void RecvDeleteItem( POS pos, int is_broken )
{
ItemAttr *temp = ::GetItemByPos( pos );//021121 lsw
if( !temp ) JustMsg(lan->OutputMessage(6,12) ); //010215 lsw
else
{
if(pos.type == HAND ) g_MouseItemType = 0;
if( is_broken )
AddCurrentStatusMessage( 200, 50, 50, lan->OutputMessage(6,13), GetItemName( temp->item_no ) );//010215 lsw
DeleteItem( temp );
}
}
void RecvDecreaseItem( k_server_decrease_item *item )
{
ItemAttr *temp = ::GetItemByPos( item->item_pos );//021121 lsw
if( !temp ) JustMsg(lan->OutputMessage(6,14) ); //010215 lsw
else temp->attr[IATTR_DURATION] = item->dur;
}
void SendLvUpPointEach( int type ) // 1器牢飘 棵扼 哎锭付促..
{
t_packet packet;
packet.h.header.type = CMD_LVUP_POINT_EACH;
{
packet.u.kein.client_lvup_point_each.type = ( BYTE ) type;
}
packet.h.header.size = sizeof( client_lvup_point_each );
QueuePacket( &packet, 1 );
}
void SendLvDownPointEach( int type )
{
t_packet packet;
packet.h.header.type = CMD_LVDOWN_POINT_EACH;
{
packet.u.kein.client_lvup_point_each.type = ( BYTE ) type;
}
packet.h.header.size = sizeof( client_lvup_point_each );
QueuePacket( &packet, 1 );
}
void ReqLvUpPoint( ) // 烙矫 饭骇诀 器牢飘 妮...
{
t_packet packet;
packet.h.header.type = REQ_LEVELUP_POINT;
packet.h.header.size = 0;
QueuePacket( &packet, 1 );
}
void ReqItemInfo0()
{
t_packet packet;
packet.h.header.type = CMD_CHR_ITEM_INFO_0;
packet.h.header.size = 0;
QueuePacket( &packet, 1 );
}
void ReqItemInfo1( )
{
t_packet packet;
packet.h.header.type = CMD_CHR_ITEM_INFO_1;
packet.h.header.size = 0;
QueuePacket( &packet, 1 );
}
void ReqItemInfo2( int count )
{
t_packet packet;
packet.h.header.type = CMD_CHR_ITEM_INFO_2;
{
packet.u.client_item_inv.count = (short int)count;
}
packet.h.header.size = sizeof( client_item_inv ) ;
QueuePacket( &packet, 1 );
}
void ReqMagicInfo()
{
t_packet packet;
packet.h.header.type = CMD_CHAR_INFO_MAGIC;
packet.h.header.size = 0;
QueuePacket( &packet, 1 );
}
void ReqSkillInfo()
{
t_packet packet;
packet.h.header.type = CMD_CHAR_INFO_SKILL;
packet.h.header.size = 0;
QueuePacket( &packet, 1 );
}
void ReqConnectInfo()
{
t_packet packet;
packet.h.header.type = CMD_CONNECT_INFO1;
packet.h.header.size = 0;
QueuePacket( &packet, 1 );
}
void SendLearnSkill( int skill_no, int guild_no )
{
t_packet packet;
packet.h.header.type = CMD_LEARN_SKILL;
{
packet.u.client_learn_skill.skillno = (short int) skill_no;
packet.u.client_learn_skill.guildindex = (short int) guild_no;
}
packet.h.header.size = sizeof( t_client_learn_skill );
QueuePacket( &packet, 1 );
}
void RecvLearnSkill( int s )
{
MP3( SN_LEARN_SKILL );
AddCurrentStatusMessage(255,255,0,lan->OutputMessage(2,500));
SCharacterData.SkillId[s] = true;
}
int SendLearnItem( ItemJoinSelect item ) // 酒捞袍 硅快扁..
{
int is_learned = FindLearnItem( item.item_no ); // 郴啊 硅款 酒捞袍牢瘤 魄窜
if( is_learned ) return -1; // 捞固 硅奎澜.
if( SCharacterData.nMoney < (DWORD) item_join[item.join_no].tech_price ) return -2; // 捣捞 何练
if( !CanLearnItemByNeedSkill( item.join_no) ) return -3;
t_packet packet;
packet.h.header.type = CMD_LEARN_ITEM;
{
packet.u.kein.client_learn_item.item_no = item.item_no;
packet.u.kein.client_learn_item.join_no = item.join_no;
}
packet.h.header.size = sizeof( k_client_learn_item );
QueuePacket( &packet, 1 );
return 1; // 辑滚肺 傈价 沁澜.
}
void RecvLearnItemOk( k_item_no item )
{
MP3( SN_LEARN_ITEM );
int pos = SearchLearnItem( item.item_no ); // 郴啊 硅款 酒捞袍牢瘤 魄窜
if( pos == -1 )
{
JustMsg( lan->OutputMessage(6,15) );//010215 lsw
return;
}
SCharacterData.ItemId[SCharacterData.ItemIdCount] = item.item_no;
SubtractMoney( GetItemAttr( item.item_no, VALUE )*4 );
SCharacterData.ItemIdCount++;
MP3( SN_LEARN_ITEM);
CallOkCancelMessageBox( MN_SKILLGUILD_ITEM, 0, 0,lan->OutputMessage(6,16),0 );//010215 lsw
}
void RecvItemRepar( k_server_item_repair_ok *r )
{
int pos = r->item_pos;
int money = r->money;
DWORD dur = r->dur;
int a = (pos & 0x00000060) >> 5 ; //0105
int b = (pos & 0x00000018) >> 3 ;
int c = (pos & 0x00000007) ;
ItemAttr &item = InvItemAttr[a][b][c];
item.attr[IATTR_DURATION] = dur;
SubtractMoney( money );
MP3( SN_ITEM_REPAR );
}
void RecvServerResult( k_server_result *p )
{
int type = p->type;
int result = p->result;
switch( type )
{
case CM_REPAIR:
{
int menu;
if( SMenu[MN_SKILLGUILD_REPAIR].bActive ) menu = MN_SKILLGUILD_REPAIR;
else menu = 0;
switch( result )
{
case 1 : CallOkCancelMessageBox( menu, 0, 0, lan->OutputMessage(5,2),0 );break;//010215 lsw
case 2 : CallOkCancelMessageBox( menu, 0, 0, lan->OutputMessage(5,3),0 );break;//010215 lsw
case 3 : CallOkCancelMessageBox( menu, 0, 0, lan->OutputMessage(5,4),0 );break;//010215 lsw
case 4 : CallOkCancelMessageBox( menu, 0, 0, lan->OutputMessage(5,5),0 );break;//010215 lsw
default : JustMsg( lan->OutputMessage(5,6)); break;//010215 lsw
}
break;
}
case CM_LEARNSKILL :
{
int menu;
if( SMenu[MN_SKILLGUILD_SKILL].bActive )
{
menu = MN_SKILLGUILD_SKILL;
GetLearnSkillInv( SMenu[menu].nTemp, SMenu[menu].nField[ 6 ].nSHideNomalStart );
}
else if( SMenu[MN_HEAL_LEARN].bActive ) menu = MN_HEAL_LEARN;
else if( SMenu[MN_SKILLGUILD_SKILL].bActive )
{
menu = MN_SKILLGUILD_KNOWLAGE;
GetLearnKnowlageInv( SMenu[menu].nField[ 6 ].nSHideNomalStart );
}
else menu = 0;
switch( result )
{
case 1 : CallOkCancelMessageBox( menu, 0, 0, lan->OutputMessage(5,7),0 );break;//010215 lsw
case 2 : CallOkCancelMessageBox( menu, 0, 0, lan->OutputMessage(5,8),0 );break;//010215 lsw
case 3 : CallOkCancelMessageBox( menu, 0, 0, lan->OutputMessage(5,9),0 );break;//010215 lsw
case 4 : CallOkCancelMessageBox( menu, 0, 0, lan->OutputMessage(5,10),0 );break;//010215 lsw
default : JustMsg( lan->OutputMessage(5,6)); break;
}
break;
}
case CM_LEARNMAGIC :
{
int menu;
if( SMenu[MN_LEARN_MAGIC_BOOK].bActive ) menu = MN_LEARN_MAGIC_BOOK;
else menu = 0;
switch( result )
{
case 2 : CallOkCancelMessageBox( menu, 0, 0, lan->OutputMessage(5,11),0 );break;//010215 lsw
case 3 : CallOkCancelMessageBox( menu, 0, 0, lan->OutputMessage(5,12),0 );break;//010215 lsw
case 4 : CallOkCancelMessageBox( menu, 0, 0, lan->OutputMessage(5,13),0 );break;//010215 lsw
// case 5 : CallOkCancelMessageBox( menu, 0, 0, " ",0 );break;
default : JustMsg(lan->OutputMessage(5,6) ); break;
}
break;
}
case CM_PREVENTING :
{
int menu = 0;
if( SMenu[MN_HEAL_MAIN].bActive ) menu = MN_HEAL_MAIN;
switch( result )
{
case 2 : CallOkCancelMessageBox( menu, 0, 0, lan->OutputMessage(5,14),0 );break;//010215 lsw
default : JustMsg( lan->OutputMessage(5,6)); break;
}
break;
}
case CM_CURE_DISEASE :
{
int menu = 0;
if( SMenu[MN_HEAL_MAIN].bActive ) menu = MN_HEAL_MAIN;
switch( result )
{
case 2 : CallOkCancelMessageBox( menu, 0, 0, lan->OutputMessage(5,15),0 );break;//010215 lsw
default : JustMsg( lan->OutputMessage(5,6)); break;
}
break;
}
case CM_INN_SLEEP :
case CM_INN_REST : switch( result )
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -