📄 menuserver2.cpp
字号:
int C2JinSearch::Load( char *filename )
{
Remove();
FILE *fp = fopen( filename, "rt" );
if( !fp ) return 0;
char temp[256];
int count = 0;
while( fgets( temp, 256, fp ) )
{
if( temp[0] == ' ' || temp[0] == ';' || temp[0] == '\n' ) continue;
if( !atoi( temp ) ) continue;
count++;
}
fseek( fp, 0, SEEK_SET );
max = count;
item = new int[max];
count = 0;
while( fgets( temp, 256, fp ) )
{
if( temp[0] == ' ' || temp[0] == ';' || temp[0] == '\n' ) continue;
int value = atoi( temp );
if( !value ) continue;
item[count] = value;
count++;
}
Sort();
fclose( fp );
return 1;
}
int C2JinSearch::Sort()
{
if( !max ) return 0;
for( int i=0; i<max-1; i++ )
{
for( int j=i+1; j<max; j++ )
{
if( item[i] > item[j] )
{
int temp = item[i];
item[i] = item[j];
item[j] = temp;
}
}
}
return 1;
}
int C2JinSearch::Search( int no )
{
if( !max ) return 0;
int low=0, high = max-1;
int mid = 0;
while( low <= high )
{
mid = (low+high)/2;
if( item[mid] == no ) return 1;
if( item[mid] < no ) low = mid+1;
else high = mid-1;
}
return 0;
}
int RecvSaveItemLogByEvent( t_packet *p )
{ //< CSD-030806
if( g_MapPort == GetManagementMapPort( MM_SAVE_LOG_FILE_MAP ) )
{
k_item_log *pData = &p->u.kein.item_log;
if( g_item_log.GetSaveLv() )
{
//罐绰单俊辑绰 促 历厘窍磊.
//if( pData->lv > g_item_log.GetSaveLv() ) return 0;
}
return SaveItemLog( pData );
}
return 0;
} //> CSD-030806
void SendItemEventLog( ItemAttr *item, short int hero_cn, short int target, int event_type, int lv )
{
if( !g_item_log.IsSave( item, event_type, lv ) ) return; // 历厘 殿鞭捞 救登搁 府畔窍磊.. // 030506 YGI
CHARLIST *hero = CheckServerId( hero_cn );
if( !hero ) return;
t_packet packet;
k_item_log *pData = &packet.u.kein.item_log;
packet.h.header.type = CMD_SAVE_ITEM_LOG;
packet.h.header.size = sizeof( k_item_log );
if( lv == 0 ) lv = 1;
pData->item = *item;
pData->lv = g_item_log.GetTypeLv(event_type)?g_item_log.GetTypeLv(event_type):1; // 030506 YGI
pData->port = GetOwnPort();
pData->type = event_type;
strcpy( pData->name1, hero->Name );
if( target > 0 )
{
CHARLIST *target_ch;
if( target > 10000 ) target_ch = CheckNpcId( target-10000 );
else target_ch = CheckServerId( target );
if( target_ch )
{
if( target_ch->IsNpc() )
{
strcpy( pData->name2, "<_NPC_>");
}
else
{
memcpy( pData->name2, target_ch->Name, 20 );//020510 lsw //趣矫 葛甫 Garbage Value
}
}
else
{
strcpy( pData->name2, "<_NULL_>" );
}
}
else
{
switch( event_type )
{
default : //acer7
case SILT_GET_STOLEN :
case SILT_PUT_STOLEN :
case SILT_GET_OTHER_CH_INVEN :
case SILT_PUT_OTHER_CH :
case SILT_GET_OTHER_CH :
strcpy( pData->name2, "<_NULL_>" );
break;
case SILT_PUT_GROUND :
case SILT_GET_GROUND :
strcpy( pData->name2, "<_GROUND_>" );
break;
case SILT_PUT_BANK :
case SILT_GET_BANK :
strcpy( pData->name2, "<_BANK_>" );
break;
case SILT_MAKE_BY_DB :
case SILT_MAKE_BY_SCRIPT :
case SILT_MAKE_BY_SKILL :
case SILT_RESOURCE_BY_SKILL :
strcpy( pData->name2, "<_MAKE_>" );
break;
case SILT_PUT_STORE :
case SILT_GET_STORE :
strcpy( pData->name2, "<_STORE_>" );
break;
case SILT_GET_GAMBLE_ITEM :
case SILT_GET_TODAY_ITEM :
case SILT_GET_GUILD_WAR :
case SILT_USE :
case SILT_DELETE_BY_DURATION :
case SILT_DELETE_BY_ATTR :
case SILT_DELETE_BY_RARE_ATTR :
strcpy( pData->name2, "<_SERVER_>" );
break;
//<! BBD 040226 苛记 芭贰矫 肺弊扼绰吧 舅荐 乐档废 眠啊
case SILT_REGISTER_AUCTION_ITEM : // 苛记 殿废矫
case SILT_CANCEL_AUCTION_SELL_ITEM : // 殿废 秒家矫
case SILT_TAKE_AUCTION_RESULT_ITEM : // 备涝茄 拱扒 茫阑矫
strcpy( pData->name2, "<_AUCTION_>" );
break;
//> BBD 040226 苛记 芭贰矫 肺弊扼绰吧 舅荐 乐档废 眠啊
}
}
SendDirectMap( &packet, GetManagementMapPort( MM_SAVE_LOG_FILE_MAP ) );
}
int GetServerSetNum()
{
return g_pServerTable->GetServerSetNum();
}
// GM 扁瓷, 甘 碍力 捞悼
//acer7
void RecvDirectMapMove( t_packet *p, short int cn )
{
if( !CheckServerId( cn ) ) return;
int index = p->u.kein.direct_map_move.map_number;
int x = p->u.kein.direct_map_move.x;
int y = p->u.kein.direct_map_move.y;
char *name = p->u.kein.direct_map_move.name;
int target_id = cn;
if( name[0] )
{
int temp = ExistHe( name ); // cn 蔼捞 乐促搁...
if( temp == -1 )
{
SendPutMenuString( KM_FAIL, 181, cn ); // 鞍篮 甘俊 绝绰 某腐磐 涝聪促.
return; // 惑措祈 捞抚捞 肋 给灯促.
}
target_id = temp;
}
CrackMgr.SendHackingUser( cn, USE_GM_TOOL, " Map Move " );
GotoUser( MapInfo[index].mapfile, x, y, target_id ); // 020705 YGI
}
// acer4
void RecvSearchChar( t_packet *p, short int cn )
{
CHARLIST *ch = CheckServerId( cn );
if( !ch ) return;
t_packet packet;
char *name = p->u.kein.default_name;
int he = ExistHe( name );
if( he > 0 )
{
CHARLIST *him = CheckServerId( he );
if( !him ) return;
PutHimInfo( him, &packet.u.kein.char_info );
packet.h.header.type = CMD_SEARCH_OTHER_CHAR;
packet.h.header.size = sizeof( k_char_info );
QueuePacket( connections, cn, &packet, 1 );
return;
}
else // 促弗 甘栏肺 夸没茄促.
{
packet.h.header.type = CMD_SEARCH_OTHER_CHAR_MAP;
packet.u.kein.char_info_map.port = GetOwnPort();
packet.u.kein.char_info_map.cn = cn;
strcpy( packet.u.kein.char_info_map.name, name );
packet.h.header.size = sizeof( k_char_info_map );
SendPacket2Maps( &packet );
}
}
// acer4
int PutHimInfo( CHARLIST *him, k_char_info *him_info )
{ //< CSD-030324
him_info->map_number = MapNumber;
him_info->curr_tactic_kind = him->GetTacticsKind();
him_info->curr_tactic_lv = him->GetWeaponSkill();
memcpy( &him_info->name_status, &him->name_status, sizeof( DWORD ) );
him_info->btLevel = him->GetLevel(); // CSD-030806
him_info->nk = him->GetNK( him->name_status.nation );
him_info->x = him->MoveSx;
him_info->y = him->MoveSy;
him_info->guild_code = him->GetGuildCode();
return 1;
} //> CSD-030324
void RecvSearchCharMap( t_packet *p )
{
int server_id = p->u.kein.char_info_map.cn;
int port = p->u.kein.char_info_map.port;
char *name = p->u.kein.char_info_map.name;
int he = ExistHe( name );
if( he > 0 )
{
CHARLIST *him = CheckServerId( he );
if( !him ) return;
k_char_info data;
PutHimInfo( him, &data );
SendDirectClientOtherMap( CMD_SEARCH_OTHER_CHAR, server_id, port, &data, sizeof( k_char_info ) );
}
}
//acer7
void RecvUseGmTool_SaveLog( t_packet *p, short int cn )
{
CHARLIST *ch = CheckServerId( cn );
if( !ch ) return;
char *type = p->u.kein.default_msg;
CrackMgr.SendHackingUser( cn, USE_GM_TOOL, type );
}
void RecvEventNumber( t_packet *p, short int cn )
{
CHARLIST *ch = CheckServerId( cn );
if( !ch ) return;
int event_no = p->u.kein.default_int;
}
void MapServerFree_kein()
{
SAFE_DELETE(g_pDungeonMap);
SAFE_DELETE(g_pDungeonMgr);
}
void SaveChangeLadder(CHARLIST* pTarget, int old_ladder, int new_ladder, int type)
{ //< CSD-040224
string strPath;
if (!g_pLogManager->GetLogPath(LT_CHANGE, strPath))
{
return;
}
FILE* fp = fopen(VA("%s/%s.txt", strPath.c_str(), pTarget->Name), "at+");
if (fp == NULL)
{
fp = fopen(VA("%s/%s.txt", strPath.c_str(), connections[pTarget->GetServerID()].id), "at+");
if (fp == NULL)
{
return;
}
}
char why[MAX_PATH];
switch (type)
{
case CLT_CHANGE_DUAL:
{
strcpy(why, "upgrade dual");
break;
}
case CLT_WIN_COLOSSUS:
{
strcpy(why, "win colossus");
break;
}
case CLT_LOSE_COLOSSUS:
{
strcpy(why, "loss colossus");
break;
}
default:
{
strcpy(why, "default");
break;
}
}
fprintf(fp,
"@ChangeLadderScore %02d/%02d/%02d/%02d/%02d/%02d (old ladder)%d(==>) (new ladder)%d (why)%s",
g_year - 2000, g_mon + 1, g_day, g_hour, g_min, g_sec,
old_ladder, new_ladder, why);
fprintf(fp, "\n");
fclose(fp);
} //> CSD-040224
void SaveObtainCombat(CHARLIST* pTarget, int nOld, int nNew)
{ //< CSD-040224
string strPath;
if (!g_pLogManager->GetLogPath(LT_CHANGE, strPath))
{
return;
}
FILE* fp = fopen(VA("%s/%s.txt", strPath.c_str(), pTarget->Name), "at+");
if (fp == NULL)
{
fp = fopen(VA("%s/%s.txt", strPath.c_str(), connections[pTarget->GetServerID()].id), "at+");
if (fp == NULL)
{
return;
}
}
fprintf(fp ,
"@ObtainCombatPoint %02d/%02d/%02d/%02d/%02d/%02d (old point)%d(==>) (new point)%d\n",
g_year - 2000, g_mon + 1, g_day, g_hour, g_min, g_sec, nOld, nNew);
fprintf(fp, ";Lightning Boom %3d Thunder Blow %3d\n", pTarget->GetCombatLevel(LIGHTNING_BOOM), pTarget->GetCombatLevel(THUNDER_BLOW));
fprintf(fp, ";Lightning Shock %3d Thunder Strike %3d\n", pTarget->GetCombatLevel(LIGHTNING_SHOCK), pTarget->GetCombatLevel(THUNDER_STRIKE));
fprintf(fp, ";Lightning Shield %3d Lightning Extreme %3d\n", pTarget->GetCombatLevel(LIGHTNING_SHIELD), pTarget->GetCombatLevel(LIGHTNING_EXTREME));
fprintf(fp, ";Blood Earth %3d Ground Attack %3d\n", pTarget->GetCombatLevel(BLOOD_EARTH), pTarget->GetCombatLevel(GROUND_ATTACK));
fprintf(fp, ";Blood Will %3d Stone Armor %3d\n", pTarget->GetCombatLevel(BLOOD_WILL), pTarget->GetCombatLevel(STONE_ARMOR));
fprintf(fp, ";Simunian Bosom %3d Earth Extreme %3d\n", pTarget->GetCombatLevel(SIMUNIAN_BOSOM), pTarget->GetCombatLevel(EARTH_EXTREME));
fprintf(fp, ";Sword N'Roses %3d Multiple Fire %3d\n", pTarget->GetCombatLevel(SWORD_N_ROSES), pTarget->GetCombatLevel(MULTIPLE_FIRE));
fprintf(fp, ";Fleet Missile %3d Converting Armor %3d\n", pTarget->GetCombatLevel(FLEET_MISSILE), pTarget->GetCombatLevel(CONVERTING_ARMOR));
fprintf(fp, ";Burning Bloody %3d Fire Extreme %3d\n", pTarget->GetCombatLevel(BURNING_BLOODY), pTarget->GetCombatLevel(FIRE_EXTREME)); // 030415 kyo
fprintf(fp, ";Poisoning Nova %3d Cherroy Shade %3d\n", pTarget->GetCombatLevel(POISONING_NOVA), pTarget->GetCombatLevel(CHERROY_SHADE));
fprintf(fp, ";Dark Blade %3d Tybern Gift %3d\n", pTarget->GetCombatLevel(DARK_BLADE), pTarget->GetCombatLevel(TYBERN_GIFT));
fprintf(fp, ";AcuquireDark %3d Dark Extreme %3d\n", pTarget->GetCombatLevel(ACUQUIRE_DARK), pTarget->GetCombatLevel(DARK_EXTREME));// 030415 kyo
fprintf(fp, ";Icing Blast %3d Critical Hiding %3d\n", pTarget->GetCombatLevel(ICING_BLAST), pTarget->GetCombatLevel(CRITICAL_HIDING));
fprintf(fp, ";Shark Missile %3d Horn Of Iceberg %3d\n", pTarget->GetCombatLevel(SHARK_MISSILE), pTarget->GetCombatLevel(HORN_OF_ICEBERG));
fprintf(fp, ";Ice Shield %3d Ice Extreme %3d\n", pTarget->GetCombatLevel(ICE_SHIELD), pTarget->GetCombatLevel(ICE_EXTREME));
fprintf(fp, ";Charging %3d Double Attack %3d\n", pTarget->GetCombatLevel(CHARGING), pTarget->GetCombatLevel(DOUBLE_ATTACK));
fprintf(fp, ";Whilwind %3d Twister %3d\n", pTarget->GetCombatLevel(WHILWIND), pTarget->GetCombatLevel(TWISTER));
fprintf(fp, ";Gust %3d Wind Extreme %3d\n", pTarget->GetCombatLevel(GUST), pTarget->GetCombatLevel(WIND_EXTREME));
fprintf(fp, ";Reserved Combat Skill Point %3d \n", pTarget->GetCombatPoint());
fclose(fp);
} //> CSD-040224
void SaveChangeCombat(CHARLIST* pTarget, int nCombat, int nOld, int nNew)
{ //< CSD-040224
string strPath;
if (!g_pLogManager->GetLogPath(LT_CHANGE, strPath))
{
return;
}
FILE* fp = fopen(VA("%s/%s.txt", strPath.c_str(), pTarget->Name), "at+");
if (fp == NULL)
{
fp = fopen(VA("%s/%s.txt", strPath.c_str(), connections[pTarget->GetServerID()].id), "at+");
if (fp == NULL)
{
return;
}
}
fprintf(fp,
"@ChangeCombatPoint %02d/%02d/%02d/%02d/%02d/%02d (old level)%d(==>) (new level)%d (combat skill)%d\n",
g_year - 2000, g_mon + 1, g_day, g_hour, g_min, g_sec, nOld, nNew, nCombat);
fprintf(fp, ";Lightning Boom %3d Thunder Blow %3d\n", pTarget->GetCombatLevel(LIGHTNING_BOOM), pTarget->GetCombatLevel(THUNDER_BLOW));
fprintf(fp, ";Lightning Shock %3d Thunder Strike %3d\n", pTarget->GetCombatLevel(LIGHTNING_SHOCK), pTarget->GetCombatLevel(THUNDER_STRIKE));
fprintf(fp, ";Lightning Shield %3d Lightning Extreme %3d\n", pTarget->GetCombatLevel(LIGHTNING_SHIELD), pTarget->GetCombatLevel(LIGHTNING_EXTREME));
fprintf(fp, ";Blood Earth %3d Ground Attack %3d\n", pTarget->GetCombatLevel(BLOOD_EARTH), pTarget->GetCombatLevel(GROUND_ATTACK));
fprintf(fp, ";Blood Will %3d Stone Armor %3d\n", pTarget->GetCombatLevel(BLOOD_WILL), pTarget->GetCombatLevel(STONE_ARMOR));
fprintf(fp, ";Simunian Bosom %3d Earth Extreme %3d\n", pTarget->GetCombatLevel(SIMUNIAN_BOSOM), pTarget->GetCombatLevel(EARTH_EXTREME));
fprintf(fp, ";Sword N'Roses %3d Multiple Fire %3d\n", pTarget->GetCombatLevel(SWORD_N_ROSES), pTarget->GetCombatLevel(MULTIPLE_FIRE));
fprintf(fp, ";Fleet Missile %3d Converting Armor %3d\n", pTarget->GetCombatLevel(FLEET_MISSILE), pTarget->GetCombatLevel(CONVERTING_ARMOR));
fprintf(fp, ";Burning Bloody %3d Fire Extreme %3d\n", pTarget->GetCombatLevel(BURNING_BLOODY), pTarget->GetCombatLevel(FIRE_EXTREME)); // 030415 kyo
fprintf(fp, ";Poisoning Nova %3d Cherroy Shade %3d\n", pTarget->GetCombatLevel(POISONING_NOVA), pTarget->GetCombatLevel(CHERROY_SHADE));
fprintf(fp, ";Dark Blade %3d Tybern Gift %3d\n", pTarget->GetCombatLevel(DARK_BLADE), pTarget->GetCombatLevel(TYBERN_GIFT));
fprintf(fp, ";AcuquireDark %3d Dark Extreme %3d\n", pTarget->GetCombatLevel(ACUQUIRE_DARK), pTarget->GetCombatLevel(DARK_EXTREME)); // 030415 kyo
fprintf(fp, ";Icing Blast %3d Critical Hiding %3d\n", pTarget->GetCombatLevel(ICING_BLAST), pTarget->GetCombatLevel(CRITICAL_HIDING));
fprintf(fp, ";Shark Missile %3d Horn Of Iceberg %3d\n", pTarget->GetCombatLevel(SHARK_MISSILE), pTarget->GetCombatLevel(HORN_OF_ICEBERG));
fprintf(fp, ";Ice Shield %3d Ice Extreme %3d\n", pTarget->GetCombatLevel(ICE_SHIELD), pTarget->GetCombatLevel(ICE_EXTREME));
fprintf(fp, ";Charging %3d Double Attack %3d\n", pTarget->GetCombatLevel(CHARGING), pTarget->GetCombatLevel(DOUBLE_ATTACK));
fprintf(fp, ";Whilwind %3d Twister %3d\n", pTarget->GetCombatLevel(WHILWIND), pTarget->GetCombatLevel(TWISTER));
fprintf(fp, ";Gust %3d Wind Extreme %3d\n", pTarget->GetCombatLevel(GUST), pTarget->GetCombatLevel(WIND_EXTREME));
fprintf(fp, ";Reserved Combat Skill Point %3d \n", pTarget->GetCombatPoint());
fclose(fp);
} //> CSD-040224
// 021117 YGI
void RecvSetInstallVersion ( t_packet *p, short int cn )
{
CHARLIST *ch = CheckServerId( cn );
if( !ch ) return;
ch->installType = IT_LIGHT_VERSION;
}
//021030 YGI
void RecvResendItem( short int cn )
{
if( !CheckServerIndex( cn ) ) return;
SendItemInventory( 0, connections, cn );
SendItemInventory( 1, connections, cn );
SendItemInventory( 2, connections, cn );
SendItemInventory( 3, connections, cn );
SendItemInventory( 4, connections, cn );
SendItemInventory( 5, connections, cn );
SendItemInventory( 6, connections, cn );
SendItemInventory( 7, connections, cn );
SendItemInventory( 8, connections, cn );
}
void RecvScriptItem( t_packet *p, short int cn )
{
k_event_script_item *pData = (k_event_script_item *)p->u.data;
CEventNpcScript *pEvent = g_EventMgr.GetEventNpcScriptByEventNo( pData->event_no);
if( !pEvent ) return;
CHARLIST *ch = CheckServerId( pData->server_id );
if( !ch ) return;
if( strcmp( ch->Name, pData->name ) != 0 ) return ;
if( pData->result )
{
SendEventNpcScriptItem( pData->server_id, pData->npc_index, pEvent->m_nEventNpcItemBag,
pEvent->m_lpszMessage, pEvent->m_nMessageSize );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -