📄 op_battle.cpp
字号:
case NK_TYPE_KILL_:
case NK_TYPE_NO_KILL_:
{
if( IsManToManFight( attacker, defender ) ) return;
break;
}
case NK_TYPE_STEAL_:
break;
}
int down = 0;
short int ano = 0, dno = 0;
int a_nk, d_nk;
int cur_nation = MapInfo[ MapNumber].nation;
int a_nation, d_nation;
a_nation = attacker->name_status.nation;
d_nation = defender->name_status.nation;
// Monster绰 磨荐 绝促..
if( d_nation == N_NONSTER ) return;
if( defender->SprType == SPRITETYPE_NPC && type == NK_TYPE_NO_KILL_ ) return; // 010613 KHS
// 瘤陛 困摹茄 甘俊 措茄 NK荐摹蔼..
a_nk = OutNK( attacker, cur_nation );
d_nk = OutNK( defender, cur_nation );
int tcase = GetCaseOfNK( cur_nation, a_nation, d_nation, a_nk, d_nk );
int *t = NationNkNum[tcase][ type];
InNK( attacker, a_nation, t[0] );
InNK( attacker, cur_nation, t[1] );
if( tcase == 3)
{
if( cur_nation != d_nation) InNK( attacker, d_nation, t[2] ); // 利惫苞 利焙狼唱扼啊 老摹窍搁 滴锅 PK啊 棵扼啊瘤 臼霸 茄促.
}
else
{
InNK( attacker, d_nation, t[2] );
}
// 弊甘俊 磷菌栏聪... 弊甘俊 措茄 NK荐摹绰 冻绢咙
if (d_nk && type == NK_TYPE_KILL_)
{
InNK(defender, cur_nation, -10);
}
} //> CSD-030509
//------------------------------------------------------------------------------
// 硅簐阑 且荐 乐绰 瘤开牢啊
// 硅簐阑 且荐 惑怕牢啊甫 魄促...
// 0810 KHS
bool CanBattleArea( LPCHARLIST a, LPCHARLIST d)
{
// 0810 KHS CMD_MOVE 菩哦捞 甸绢坷绰镑俊 d->attackedblock = 0;栏肺 Setting茄促.
if( d->attackedblock ) return false; // 弥檬俊 霸烙俊 甸绢坷搁 捞悼窍扁傈鳖瘤绰 傍拜阑 罐瘤 臼绰促.
if( a->Hp <= 0 ) return false; // 磷篮磊绰 傍拜且荐 绝促.
if( d->Hp <= 0 ) return false; // 磷篮磊甫 肚 傍拜且鉴 绝促.
// 必厩PK // 1012 KHS
// if( d->name_status.ultra_pk == 1 ) return true;
// if( a->name_status.ultra_pk == 1 ) return false; // 惫厩 PK绰 傍拜且荐 绝促. 付过俊档 乐唱 Check 秦拎...
if( d->IsCounselor() ) return false;
if( d->accessory[ WT_WEAPON] == 114 ) return false; // 魂鸥 渴阑 涝菌促.
// 030106 kyo 困摹捞悼
if (a->Race != GUARD)
{ //< CSD-030226 : 版厚盔捞 酒聪扼搁 版快
if (TileMap[a->MoveSx][a->MoveSy].attr_no_battle)
{
return false; // 甘俊 no battle 加己捞 乐栏搁 傍拜且荐 绝促.
}
if (TileMap[d->MoveSx][d->MoveSy].attr_no_battle)
{
return false; // 甘俊 no battle 加己捞 乐栏搁 傍拜且荐 绝促.
}
} //> CSD-030226
#ifdef _NATION_APPLY_
if( a->name_status.nation != d->name_status.nation ) return true; // 0927 YGI
/* else
{
if( d->SprType == SPRITETYPE_NPC )
if( d->Race == HUMAN )
{
// 鞍篮 惫啊 荤恩npc绰 傍拜阑 罐瘤 臼霸 茄促.
return false;
}
}
*/
#endif
if (a->Race == GUARD) return true;
if (IsHeNK(d, MapInfo[MapNumber].nation) > 5) return true;
if (g_block_attack) return false; // 傍拜且荐 绝促. 腹距 Event锭巩俊 傍拜且荐 绝绰 惑怕肺 汲沥阑 官操菌促搁 ..
if (a->dwDontAttack > 0) return false; //父距 傍拜阂啊 惑怕扼搁
if (a->Hungry <= 0) return false;
return true;
}
inline int BojungDamage( LPCHARLIST d, int damage )
{
return damage;
}
//............................
void SendYouDie( int cn )
{
t_packet p;
p.h.header.type = CMD_YOU_DIE;
p.u.you_die.id = cn;
p.u.you_die.t = 10;
p.h.header.size = sizeof( t_you_die );
QueuePacket( connections, cn, &p, 1 );
CastMe2Other( cn, &p );
}
void RecvDebugReqCharInfo( int cn, int target )
{
t_packet p;
LPCHARLIST n;
p.h.header.type = CMD_DEBUG_REQ_CHAR_INFO;
p.u.debug_server_req_char_info.id = target;
if( target >= 10000 )
{
n = &NPCList[target-10000];
}
else
{
n = &connections[ target].chrlst;
}
p.u.debug_server_req_char_info.id = target;
p.u.debug_server_req_char_info.lv = n->GetLevel(); // CSD-030806
p.u.debug_server_req_char_info.exp = n->Exp;
p.u.debug_server_req_char_info.ac = n->Ac;
p.u.debug_server_req_char_info.Str = n->Str; // 塞
p.u.debug_server_req_char_info.Con = n->Con; // 扒碍
p.u.debug_server_req_char_info.Dex = n->Dex; // 刮酶己
p.u.debug_server_req_char_info.Wis = n->Wis; // 瘤驱
p.u.debug_server_req_char_info.Int = n->Int; // 瘤瓷
p.u.debug_server_req_char_info.MoveP = n->MoveP; // 捞悼仿
p.u.debug_server_req_char_info.Char = n->Char; // 概仿
p.u.debug_server_req_char_info.Endu = n->Endu; // 历氢仿
p.u.debug_server_req_char_info.Moral = n->Moral; // 荤扁
p.u.debug_server_req_char_info.Luck = n->Luck; // 青款
p.u.debug_server_req_char_info.wsps = n->wsps; // 付过仿->付过 皋葛扼捞令
p.u.debug_server_req_char_info.Hp = n->Hp;
p.u.debug_server_req_char_info.HpMax = n->HpMax;
p.u.debug_server_req_char_info.Mp = n->Mana;
p.u.debug_server_req_char_info.MpMax = n->ManaMax;
p.u.debug_server_req_char_info.Hungry= n->Hungry;
p.u.debug_server_req_char_info.HungryMax = n->HungryMax;
p.u.debug_server_req_char_info.event_no = n->eventno; // 0131 YGI
p.h.header.size = sizeof( t_debug_server_req_char_info );
QueuePacket( connections, cn, &p, 1 );
}
//acer7
char skill_name42[][30] =
{
"SPRITUALITY",
"POISONING",
"ENTRAPMENT",
"SCROLLING",
"CUNNING",
"BOMBPLAY",
"STEALING",
"FARMING",
"MINING",
"FISHING",
"CUTDOWN",
"BUTCHERING",
"HERBDIGGING",
"HERDING",
"CARPENTRY",
"BLACKSMITHY",
"COOKING",
"TAILORING",
"BOWCRAFTING",
"ALCHEMING",
"CANDLEMAKING",
"REPARING",
"REUTILIZING",
"MUSICIANSHIP",
"DETECT",
"HIDE",
"CAMPING",
"TAIMING",
"COMMUNICATION",
"ANIMAL_LORE",
"ARMS_LORE",
"EVALUATE_INTELIGENCE",
"EVALUATE_WISDOM",
"ANATOMY_JUDGEMENT",
"ITEM_IDENTIFICATION",
"TASTE_IDENTIFICATION",
"APPRAISAL",
"HEALING",
"JUMP",
"RIDING",
};
// acer7
void SaveBallancingSkill( LPCHARLIST a, int skillno )
{
FILE *fp;
char temp[ FILENAME_MAX];
a->balancingtest --;
if( a->balancingtest > 0 ) return;
a->balancingtest = 50;
sprintf( temp, "./skill_log/%s.txt", a->Name );
fp = fopen( temp, "at+");
if( fp == NULL )
{
sprintf( temp, "./skill_log/ID_%s.txt", connections[a->GetServerID()].id );
fp = fopen( temp, "at+" );
if( fp == NULL ) return;
}
int mother = SkillTbl[skillno].MotherSkillType;
fprintf( fp, "skill< %s[%d(%d)](lv%d:exp%d) >\n", skill_name42[skillno], skillno, mother, a->skillexp[mother].skillexp/10000, a->skillexp[mother].skillexp%10000 );
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, "WORKER(Lv:%3d/Exp:%9d/ladder:%3d/fame:%3d)\n", a->GetLevel(), a->Exp, a->LadderScore, a->fame ); // CSD-030806
for(int iCount = 0; iCount<45; iCount++)//胶懦 版氰摹
{
if( a->skillexp[iCount].skillexp/10000 )
{
fprintf(fp,"SkillExp%d Exp %d/%d RareRate %d month %d day %d makecount %d\n",
iCount,a->skillexp[iCount].skillexp/10000, a->skillexp[iCount].skillexp%10000,
a->skillexp[iCount].rare,
((LPSKILLEXP2)(&a->skillexp[iCount]))->month,
((LPSKILLEXP2)(&a->skillexp[iCount]))->day,
((LPSKILLEXP2)(&a->skillexp[iCount]))->makecount) ;
}
}
fprintf( fp, "\n" );
fclose(fp);
}
void SaveBallancing2( LPCHARLIST a, LPCHARLIST d, int magicno, int damage, int mana, int attack, int attacktype, int tac )
{ //< CSD-030324
if(a->IsNpc()){return;}
if( a->balancingtest/20 == (a->balancingtest-1)/20)//20 锅俊 茄锅
{
return;
}
char temp[ FILENAME_MAX] = {0,};
::sprintf( temp, "./SimpleLog/%s.txt", a->Name );
FILE *fp = fopen( temp, "at+");
if( NULL == fp )
{
sprintf( temp, "./SimpleLog/%s.txt", connections[a->GetServerID()].id );
fp = fopen( temp, "at+" );
if( fp == NULL ) return;
fprintf( fp, " %s \n", a->Name );
}
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, " Hp %4d/%4d -> Hp %4d/%4d \n", a->Hp, a->HpMax, d->Hp, d->HpMax );
fprintf( fp, " Mana %4d/%4d -> Mana %4d/%4d \n", a->Mana, a->ManaMax, d->Mana, d->ManaMax );
fprintf( fp, " Hungry %4d/%4d -> Hngy %4d/%4d \n", a->Hungry, a->HungryMax, d->Hungry, d->HungryMax );
fprintf( fp, " Damage : %4d \n", damage );
fprintf( fp, " Used Mana: %4d \n", mana );
switch(a->Spell)
{
case WIZARD_SPELL:
{
::fprintf(fp, " Magery Tactics(%3d:%d)\n",
a->Skill[TACTICS_Magery], a->tac_skillEXP[11]);
}break;
case PRIEST_SPELL:
{
::fprintf(fp, " Orison Tactics(%3d:%d)\n",
a->Skill[TACTICS_Orison], a->tac_skillEXP[12]);
}break;
}
}
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
const int ino = a->equip[ WT_WEAPON].item_no;
CItem *ii = ItemUnit(ino);
int itemkind = IK_NONE;
if( ii ) {itemkind = ii->GetItemKind();}
else {itemkind = IK_NONE;}
char *at = NULL;
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, " Hp %4d/%4d -> Hp %4d/%4d \n", a->Hp, a->HpMax, d->Hp, d->HpMax );
fprintf( fp, " Mana %4d/%4d ->Mana %4d/%4d \n", a->Mana, a->ManaMax, d->Mana, d->ManaMax );
fprintf( fp, " Hungry %4d/%4d ->Hngy %4d/%4d \n", a->Hungry, a->HungryMax, d->Hungry, d->HungryMax );
fprintf( fp, " Ac %3d -> %3d \n", a->Ac, d->Ac );
fprintf( fp, " Damage : %4d \n", damage );
fprintf( fp, " WEAPON : %s( %d ) \n", temp, a->equip[ WT_WEAPON].item_no );
fprintf( fp, " AttackType : %s \n", at );
}
//
const int iTacKind = a->GetTacticsKind();// == SKILL_UNKNOWN 捞搁 扁废 窍搁 救登瘤.
switch(iTacKind)
{
case TACTICS_Crapple :
{
::fprintf(fp, " Crapple Tactics(%3d:%d)\n",
a->Skill[iTacKind], a->tac_skillEXP[0]);
}break;
case TACTICS_swordmanship :
{
::fprintf(fp, " Swordmanship Tactics(%3d:%d)\n",
a->Skill[iTacKind], a->tac_skillEXP[1]);
}break;
case TACTICS_Archery :
{
::fprintf(fp, " Archery Tactics(%3d:%d)\n",
a->Skill[iTacKind], a->tac_skillEXP[2]);
}break;
case TACTICS_Fencing :
{
::fprintf(fp, " Fencing Tactics(%3d:%d)\n",
a->Skill[iTacKind], a->tac_skillEXP[3]);
}break;
case TACTICS_Mace_fighting :
{
::fprintf(fp, " Mace Fighting Tactics(%3d:%d)\n",
a->Skill[iTacKind], a->tac_skillEXP[4]);
}break;
case TACTICS_Pierce :
{
::fprintf(fp, " Pierce Tactics(%3d:%d)\n",
a->Skill[iTacKind], a->tac_skillEXP[5]);
}break;
case TACTICS_Whirl :
{
::fprintf(fp, " Whirl Tactics(%3d:%d)\n",
a->Skill[iTacKind], a->tac_skillEXP[6]);
}break;
case TACTICS_Hurl :
{
::fprintf(fp, " Hurl Tactics(%3d:%d)\n",
a->Skill[iTacKind], a->tac_skillEXP[7]);
}break;
case TACTICS_Parrying :
{
::fprintf(fp, " Parrying Tactics(%3d:%d)\n",
a->Skill[iTacKind], a->tac_skillEXP[8]);
}break;
case TACTICS_Double_Swordmanship :
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -