📄 op_battle.cpp
字号:
::fprintf(fp, " Double Swordmanship Tactics(%3d:%d)\n",
a->Skill[iTacKind], a->tac_skillEXP[9]);
}break;
case TACTICS_Double_MaceFighting :
{
::fprintf(fp, " Double Mace Fighting Tactics(%3d:%d)\n",
a->Skill[iTacKind], a->tac_skillEXP[10]);
}break;
case TACTICS_Magery :
{
::fprintf(fp, " Magery Tactics(%3d:%d)\n",
a->Skill[iTacKind], a->tac_skillEXP[11]);
}break;
case TACTICS_Orison :
{
::fprintf(fp, " Orison Tactics(%3d:%d)\n",
a->Skill[iTacKind], a->tac_skillEXP[12]);
}break;
default:
{
::fprintf(fp, " TACTIC UNKNOWN \n");
}break;
}
::fprintf(fp, "\n");
fclose(fp);
}
void SaveBallancing( LPCHARLIST a, LPCHARLIST d, int magicno, int damage, int mana, int attack, int attacktype, int tac )
{ //< CSD-TW-030622
if (a->IsNpc())
{
return;
}
a->balancingtest --;
if( a->balancingtest > 0 )
{
::SaveBallancing2( a, d, magicno, damage, mana, attack, attacktype, tac );
return;
}
a->balancingtest = 100;
string strPath;
if (!g_pLogManager->GetLogPath(LT_BATTLE, strPath))
{
return;
}
//< CSD-040224
FILE* fp = fopen(VA("%s/%s.txt", strPath.c_str(), a->Name), "at+");
if (fp == NULL)
{
fp = fopen(VA("%s/%s.txt", strPath.c_str(), connections[a->GetServerID()].id), "at+");
if (fp == NULL)
{
return;
}
}
//> CSD-040224
if( magicno )
{
if (magicno >= 215)
{
fprintf( fp, "Combat Skill< %3d:%30s > --> %20s \n", magicno, Magic_Ref[magicno].Han_Name, d->Name );
}
else
{
fprintf( fp, "Magic< %3d:%30s > --> %20s \n", magicno, Magic_Ref[magicno].Han_Name, d->Name );
}
fprintf( fp, "---%s(%3d,%3d) %02d.%02d %02d:%02d:%02d ---\n", MapName, a->MoveSx, a->MoveSy, g_mon+1, g_day,g_hour, g_min, g_sec );
fprintf(fp, " Attack(Lv:%3d/Exp:%9d/ladder:%3d/fame:%3d)\n", a->GetLevel(), a->Exp, a->LadderScore, a->fame); // CSD-030806
fprintf(fp, " Defence(Lv:%3d/Exp:%9d)\n", d->GetLevel(), d->Exp); // CSD-030806
fprintf( fp, " Reserved Point %3d -> Reserved Point %3d\n", a->GetReservedPoint(), d->GetReservedPoint());
fprintf( fp, " Str %3d -> Str %3d Hp %4d/%4d -> Hp %4d/%4d \n", a->Str, d->Str, a->Hp, a->HpMax, d->Hp, d->HpMax );
fprintf( fp, " Con %3d -> Con %3d Mana %4d/%4d ->Mana %4d/%4d \n", a->Con, d->Con, a->Mana, a->ManaMax, d->Mana, d->ManaMax );
fprintf( fp, " Dex %3d -> Dex %3d Hungry %4d/%4d ->Hngy %4d/%4d \n", a->Dex, d->Dex, a->Hungry, a->HungryMax, d->Hungry, d->HungryMax );
fprintf( fp, " Wis %3d -> Wis %3d \n", a->Wis, d->Wis );
fprintf( fp, " Int %3d -> Int %3d Damage : %4d \n", a->Int, d->Int, damage );
fprintf( fp, " MoveP %3d -> MoveP %3d Used Mana: %4d \n", a->MoveP, d->MoveP, mana );
fprintf( fp, " Char %3d -> Char %3d \n", a->Char , d->Char );
fprintf( fp, " Endu %3d -> Endu %3d \n", a->Endu , d->Endu );
fprintf( fp, " Moral %3d -> Moral %3d \n", a->Moral, d->Moral);
fprintf( fp, " Luck %3d -> Luck %3d \n", a->Luck , d->Luck );
fprintf( fp, " wsps %3d -> wsps %3d \n", a->wsps , d->wsps );
fprintf( fp, "规绢磊狼 付过历亲摹 \n" );
fprintf(fp, "Resist Poison %3d\n", d->GetBasicResist(RT_POISON));//030227 lsw
fprintf(fp, "Resist Curse %3d\n", d->GetBasicResist(RT_CURSE));
fprintf(fp, "Resist Fire %3d\n", d->GetBasicResist(RT_FIRE));
fprintf(fp, "Resist Ice %3d\n", d->GetBasicResist(RT_ICE));
fprintf(fp, "Resist Elect %3d\n", d->GetBasicResist(RT_ELECT));
fprintf(fp, "Resist Holy %3d\n", d->GetBasicResist(RT_HOLY));
}
else
{
fprintf( fp, "Weapon-Attack< %d:%s > --> %s\n", attacktype, magicno, Magic_Ref[magicno].Han_Name, d->Name );
fprintf( fp, "---%s(%3d,%3d) %02d.%02d %02d:%02d:%02d ---\n", MapName, a->MoveSx, a->MoveSy, g_mon+1, g_day,g_hour, g_min, g_sec );
fprintf(fp, " Attack(Lv:%3d/Exp:%9d/ladder:%3d/fame:%3d)\n", a->GetLevel(), a->Exp, a->LadderScore, a->fame); // CSD-030806
fprintf(fp, " Defence(Lv:%3d/Exp:%9d)\n", d->GetLevel(), d->Exp); // CSD-030806
int itemkind;
char *at;
const int ino = a->equip[ WT_WEAPON].item_no;
CItem *ii = ItemUnit( ino/1000, ino%1000);
if( ii ) itemkind = ii->GetItemKind();
else itemkind = IK_NONE;
switch( itemkind )
{
// 厘芭府 公扁....
case IK_DUAL_BOW: at = "DUAL_BOW"; break;//030102 lsw Dual BOW
case IK_SHORT_BOW : at = "SHORT_BOW"; break;
case IK_TWO_ARROW : at = "TWO_ARROW"; break;
case IK_DUAL_ARROW : at = "DUAL_ARROW"; break;//030102 lsw
case IK_LONG_BOW : at = "LONG_BOW"; break;
case IK_ARROW_POINT : at = "ARROW_POINT"; break;
case IK_FEATHER : at = "FEATHER"; break;
// 吝厘芭府..
case IK_HURL : at = "THROWING WEAPON"; break;
// 窜芭府公扁..
default : at = "MELEE WEAPON"; break;
}
char temp[ FILENAME_MAX];
if( ii )
{
strcpy( temp, ii->GetHanName() );
}
else
{
strcpy( temp, " NO WEAPON " );
}
fprintf( fp, " Reserved Point %3d -> Reserved Point %3d\n", a->GetReservedPoint(), d->GetReservedPoint());
fprintf( fp, " Str %3d -> Str %3d Hp %4d/%4d -> Hp %4d/%4d \n", a->Str, d->Str, a->Hp, a->HpMax, d->Hp, d->HpMax );
fprintf( fp, " Con %3d -> Con %3d Mana %4d/%4d ->Mana %4d/%4d \n", a->Con, d->Con, a->Mana, a->ManaMax, d->Mana, d->ManaMax );
fprintf( fp, " Dex %3d -> Dex %3d Hungry %4d/%4d ->Hngy %4d/%4d \n", a->Dex, d->Dex, a->Hungry, a->HungryMax, d->Hungry, d->HungryMax );
fprintf( fp, " Wis %3d -> Wis %3d Ac %3d -> %3d \n", a->Wis, d->Wis, a->Ac, d->Ac );
fprintf( fp, " Int %3d -> Int %3d \n", a->Int, d->Int);
fprintf( fp, " MoveP %3d -> MoveP %3d Damage : %4d \n", a->MoveP, d->MoveP, damage );
fprintf( fp, " Char %3d -> Char %3d WEAPON : %s( %d ) \n", a->Char , d->Char, temp, a->equip[ WT_WEAPON].item_no );
fprintf( fp, " Endu %3d -> Endu %3d AttackType : %s \n", a->Endu , d->Endu, at );
fprintf( fp, " Moral %3d -> Moral %3d \n", a->Moral, d->Moral );
fprintf( fp, " Luck %3d -> Luck %3d \n", a->Luck , d->Luck );
fprintf( fp, " wsps %3d -> wsps %3d \n", a->wsps , d->wsps );
}
fprintf(fp, " [Tactic Info]\n");
fprintf(fp, " Crapple Tactics(%3d:%d)\n", a->Skill[TACTICS_Crapple], a->tac_skillEXP[0]);
fprintf(fp, " Swordmanship Tactics(%3d:%d)\n", a->Skill[TACTICS_swordmanship], a->tac_skillEXP[1]);
fprintf(fp, " Archery Tactics(%3d:%d)\n", a->Skill[TACTICS_Archery], a->tac_skillEXP[2]);
fprintf(fp, " Fencing Tactics(%3d:%d)\n", a->Skill[TACTICS_Fencing], a->tac_skillEXP[3]);
fprintf(fp, " Mace Fighting Tactics(%3d:%d)\n", a->Skill[TACTICS_Mace_fighting], a->tac_skillEXP[4]);
fprintf(fp, " Pierce Tactics(%3d:%d)\n", a->Skill[TACTICS_Pierce], a->tac_skillEXP[5]);
fprintf(fp, " Whirl Tactics(%3d:%d)\n", a->Skill[TACTICS_Whirl], a->tac_skillEXP[6]);
fprintf(fp, " Hurl Tactics(%3d:%d)\n", a->Skill[TACTICS_Hurl], a->tac_skillEXP[7]);
fprintf(fp, " Parrying Tactics(%3d:%d)\n", a->Skill[TACTICS_Parrying], a->tac_skillEXP[8]);
fprintf(fp, " Double Swordmanship Tactics(%3d:%d)\n", a->Skill[TACTICS_Double_Swordmanship], a->tac_skillEXP[9]);
fprintf(fp, " Double Mace Fighting Tactics(%3d:%d)\n", a->Skill[TACTICS_Double_MaceFighting], a->tac_skillEXP[10]);
fprintf(fp, " Magery Tactics(%3d:%d)\n", a->Skill[TACTICS_Magery], a->tac_skillEXP[11]);
fprintf(fp, " Orison Tactics(%3d:%d)\n", a->Skill[TACTICS_Orison], a->tac_skillEXP[12]);
fprintf(fp, " [NK Info]\n");
fprintf(fp, "N_NEUTRAL = %d N_NONSTER = %d N_VYSEUS = %d\n", a->nk[N_NEUTRAL], a->nk[N_NONSTER], a->nk[N_VYSEUS]);
fprintf(fp, "N_ZYPERN = %d N_HEGEMONIA = %d N_YILSE =%d\n", a->nk[N_ZYPERN ], a->nk[N_HEGEMONIA], a->nk[N_YILSE]);
fprintf(fp, " [Party Info]\n");
for (int i = 0; i < MAX_PARTY_MEMBER; ++i)
{
if (a->party[i].On && a->party[i].Name)
{
fprintf(fp, " [%d]%20s%s", i, a->party[i].Name, (i==2)?"\n":" ");
}
}
fprintf(fp, "\n");
fclose(fp);
} //> CSD-TW-030622
void SaveLevelUp(LPCHARLIST pTarget)
{ //< CSD-TW-030622
string strPath;
if (!g_pLogManager->GetLogPath(LT_LEVEL_UP, strPath))
{
return;
}
//< CSD-040224
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;
}
}
//> CSD-040224
fprintf(fp, " %04d.%02d.%02d %02d:%02d:%02d\n", g_year, g_mon + 1, g_day, g_hour, g_min, g_sec); // CSD-040202
fprintf(fp, " [Ability Info]\n");
fprintf(fp, " Level %3d Exp %3d Step %3d\n", pTarget->GetLevel(), pTarget->Exp, pTarget->GetExperienceStep()); // CSD-030806
fprintf(fp, " Class %3d Step %3d Dual %3d\n", pTarget->Class, pTarget->GetClassStep(), pTarget->GetDualClass());
fprintf(fp, " Str %3d Con %3d Dex %3d\n", pTarget->Str, pTarget->Con, pTarget->Dex);
fprintf(fp, " Wis %3d Int %3d MoveP %3d\n", pTarget->Wis, pTarget->Int, pTarget->MoveP);
fprintf(fp, " Char %3d Endu %3d Moral %3d\n", pTarget->Char, pTarget->Endu, pTarget->Moral);
fprintf(fp, " Luck %3d wsps %3d Reserved Point %3d\n", pTarget->Luck, pTarget->wsps, pTarget->GetReservedPoint());
fprintf(fp, " [Tactic Info]\n");
fprintf(fp, " Crapple Tactics(%3d:%d)\n", pTarget->Skill[TACTICS_Crapple], pTarget->tac_skillEXP[0]);
fprintf(fp, " Swordmanship Tactics(%3d:%d)\n", pTarget->Skill[TACTICS_swordmanship], pTarget->tac_skillEXP[1]);
fprintf(fp, " Archery Tactics(%3d:%d)\n", pTarget->Skill[TACTICS_Archery], pTarget->tac_skillEXP[2]);
fprintf(fp, " Fencing Tactics(%3d:%d)\n", pTarget->Skill[TACTICS_Fencing], pTarget->tac_skillEXP[3]);
fprintf(fp, " Mace Fighting Tactics(%3d:%d)\n", pTarget->Skill[TACTICS_Mace_fighting], pTarget->tac_skillEXP[4]);
fprintf(fp, " Pierce Tactics(%3d:%d)\n", pTarget->Skill[TACTICS_Pierce], pTarget->tac_skillEXP[5]);
fprintf(fp, " Whirl Tactics(%3d:%d)\n", pTarget->Skill[TACTICS_Whirl], pTarget->tac_skillEXP[6]);
fprintf(fp, " Hurl Tactics(%3d:%d)\n", pTarget->Skill[TACTICS_Hurl], pTarget->tac_skillEXP[7]);
fprintf(fp, " Parrying Tactics(%3d:%d)\n", pTarget->Skill[TACTICS_Parrying], pTarget->tac_skillEXP[8]);
fprintf(fp, " Double Swordmanship Tactics(%3d:%d)\n", pTarget->Skill[TACTICS_Double_Swordmanship], pTarget->tac_skillEXP[9]);
fprintf(fp, " Double Mace Fighting Tactics(%3d:%d)\n", pTarget->Skill[TACTICS_Double_MaceFighting], pTarget->tac_skillEXP[10]);
fprintf(fp, " Magery Tactics(%3d:%d)\n", pTarget->Skill[TACTICS_Magery], pTarget->tac_skillEXP[11]);
fprintf(fp, " Orison Tactics(%3d:%d)\n", pTarget->Skill[TACTICS_Orison], pTarget->tac_skillEXP[12]);
fprintf(fp, " [Resist Info]\n");
fprintf(fp, " Resist Poison %3d\n", pTarget->GetBasicResist(RT_POISON));//030227 lsw
fprintf(fp, " Resist Curse %3d\n", pTarget->GetBasicResist(RT_CURSE));
fprintf(fp, " Resist Fire %3d\n", pTarget->GetBasicResist(RT_FIRE));
fprintf(fp, " Resist Ice %3d\n", pTarget->GetBasicResist(RT_ICE));
fprintf(fp, " Resist Elect %3d\n", pTarget->GetBasicResist(RT_ELECT));
fprintf(fp, " Resist Holy %3d\n", pTarget->GetBasicResist(RT_HOLY));
fprintf(fp, " [Combat Skill Info]\n");
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, " Combat Skill Point %3d \n", pTarget->GetCombatPoint());
fprintf(fp, " [NK Info]\n");
fprintf(fp, " N_NEUTRAL %d N_NONSTER %d N_VYSEUS %d\n", pTarget->nk[N_NEUTRAL], pTarget->nk[N_NONSTER], pTarget->nk[N_VYSEUS]);
fprintf(fp, " N_ZYPERN %d N_HEGEMONIA %d N_YILSE %d\n", pTarget->nk[N_ZYPERN], pTarget->nk[N_HEGEMONIA], pTarget->nk[N_YILSE]);
fprintf(fp, " [Party Info]\n");
for (int i = 0; i < MAX_PARTY_MEMBER; ++i)
{
if (pTarget->party[i].On && pTarget->party[i].Name)
{
fprintf(fp, " [%d]%20s%s", i, pTarget->party[i].Name, (i==2)?"\n":" ");
}
}
fprintf(fp, "\n");
fclose(fp);
} //> CSD-TW-030622
//----------------------------------------------------------------------------
// 010502 YGI
// 林巩阑 熃菌阑 版快
// acer5
void Recv_CMD_PLEASE_GIVE_LIFE( int cn, int type, int alive_word_type )
{
LPCHARLIST ch = CheckServerId( cn );
if( !ch ) return;
bool alive_flag = false;
if( type == 0 ) // 老馆 蜡历
{
if( ch->viewtype != VIEWTYPE_GHOST_ ) return; //蜡飞鸥涝档 酒聪搁辑..
if( g_stop_please_give_life ) return; // 脚傈狼 扁瓷阑 阜阑荐 乐促. ( 登混酒聪绰 )..
if( ch->reporter_mode ) return; // 扁磊葛靛老版快浚 秦寸绝促. // 011128 YGI
int ret = g_AliveMap.CheckAlive( ch->MoveSx, ch->MoveSy, MapNumber, alive_word_type );
if( ret < 0 ) return; // 混酒 朝荐 乐绰 镑捞 酒聪促.
if( ret == 100 ) // 混妨 霖促.
{
SkillMgr.CharacterToAlive(ch);// 混妨霖促.//020501 lsw
}
else // 混酒唱绰 镑捞变 窍瘤父 林巩捞 撇啡促.
{
char ret_alive_word_type = ret;
SendPacketDefault( CMD_ALIVE_FAIL_RESULT, (char*)&ret_alive_word_type, sizeof( char), cn );
}
}
else
{
//ACER5
CrackMgr.SendHackingUser( cn, USE_GM_TOOL, "CMD_GIVE_LIFE" );
SkillMgr.CharacterToAlive(ch, 1);// 混妨霖促.//020501 lsw
}
return;
}
///////////////////////// 0726 lkh 眠啊 ///////////////////////////
void TameNpcAI( LPCHARLIST master ) //林牢俊霸 加秦 乐绰 抛怪NPC狼 青悼阑 力绢
{
LPCHARLIST tame_Char=NULL, target = NULL;
int distance, distance_Min = 1000;
for( int i = NPC_LIST_START ; i < MAX_NPC_LIST ; i ++ ) //怕怪茄 NPC甫 茫绰促.
{
if (NPCList[i].bAlive == ALIVE_ && NPCList[i].IsTamedNpc())
if( NPCList[i].HostName[0] )
if( !strcmp(NPCList[i].HostName, master->Name ) )
{
tame_Char = &NPCList[i];
break;
}
}
if(!tame_Char) return; //林牢捞 抛怪茄 NPC啊 绝绰 版快
for( int j = NPC_LIST_START ; j < MAX_NPC_LIST ; j ++ ) //傍拜且 措惑阑 茫绰促.
{
if( NPCList[j].bAlive == ALIVE_ && tame_Char!=&NPCList[j] )
{
distance = sqrt( pow( (master->X-NPCList[j].X),2 ) + pow( (master->Y-NPCList[j].Y),2 ) );
if(distance<distance_Min)
{
distance_Min = distance;
target = &NPCList[j];
}
}
}
if(!target) return; //傍拜且 措惑捞 绝促.
if( target->SprType == SPRITETYPE_NPC )
{
tame_Char->targetid = target->GetServerID() + 10000;
SendNPC_Parameter( tame_Char->GetServerID(), NPC_PARAMETER_TARGETID, tame_Char->targetid );
}
else
{
tame_Char->targetid = target->GetServerID();
SendNPC_Parameter( tame_Char->GetServerID(), NPC_PARAMETER_TARGETID, tame_Char->targetid );
}
tame_Char->tame_cmd = LC_TAME_ATTACK;
SendNPC_Parameter( tame_Char->GetServerID(), NPC_PARAMETER_TAME_CMD, LC_TAME_ATTACK );
strcpy( tame_Char->TargetName, target->Name );
SendTameResult( master->GetServerID(), 5 ); //TAME_ATTACK
SendNPC_StringParameter( tame_Char->GetServerID(), NPC_PARAMETER_TARGETNAME, tame_Char->TargetName );
}
// PK甫 且荐 乐绰 Flag甫 焊辰促.
//void SendStartGoodBad( int id )
void SendNK( int id, int nk )
{
t_packet p;
if( id >= 10000 ) return;
p.h.header.type = CMD_START_GOODBAD;
p.u.start_goodbad.id = id;
p.u.start_goodbad.nk3 = nk;
p.h.header.size = sizeof( t_start_goodbad );
QueuePacket( connections, id, &p, 1 );
CastMe2Other( id, &p );
}
void SendNK( int id, int nk3, int nk4, int nk6 )
{
t_packet p;
if( id >= 10000 ) return;
p.h.header.type = CMD_START_GOODBAD;
p.u.start_goodbad.id = id;
p.u.start_goodbad.nk3 = nk3;
p.u.start_goodbad.nk4 = nk4;
p.u.start_goodbad.nk6 = nk6;
p.h.header.size = sizeof( t_start_goodbad );
QueuePacket( connections, id, &p, 1 );
CastMe2Other( id, &p );
}
void SaveCharacterBin( char *filename, CHARLIST *ch )
{
FILE *fp;
char full_name[MAX_PATH];
sprintf( full_name, "%d_%d_%d_%d_%s.bin", g_mon+1, g_day, g_hour, g_min, filename );
fp = fopen( full_name, "wb" );
if( !fp ) return;
fwrite( ch, sizeof(CHARLIST), 1, fp );
fclose( fp );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -