📄 op_battle.cpp
字号:
{
exp = base_point*0.4;
partexpflag = 1; // 颇萍客 唱传促.
if (d)
{
switch (d->SprNo)
{ // 歹固甫 傍拜且锭俊绰 颇萍甫 秦档 版摹甫 唱穿瘤 臼绰促.
case 92:
case 93:
case 94:
case 95:
case 96: partexpflag = 0; break;
}
}
break;
}
case HIT_AND_NOTDEAD:
{
if (damage > d->HpMax)
{
exp = base_point;
}
else
{
tdamage = damage*100/ATTACKPOWER_PRO_;
exp = base_point*tdamage/d->HpMax;
}
partexpflag = 1; // 颇萍客 唱传促.
break;
}
case HIT_AND_ALIVE:
{
exp = (DWORD)(base_point*0.02);
partexpflag = 1; // 颇萍客 唱传促.
break;
}
case HIT_GHOSTRESURRECTION:
{
exp = (DWORD)base_point;
partexpflag = 0;
break;
}
default :
{
return 0;
}
}
if( bCanGetExpPcPc == true )
{
exp /= GET_EXP_PC_AND_PC_; // PC埃俊绰 版氰摹甫 炼陛父 霖促.
}
if( exp == 0 ) return 0;
if (a->GetLevel() < 5)
{ //< CSD-030806
exp += 2; // 弥历 2捞惑捞 唱坷霸 茄促. 捞繁荐摹绰 绢瞒乔 绝瘤父..
} //> CSD-030806
CHARLIST *ttt[6] ={0,};
int tc = 0;
if( partexpflag == 1 ) // 版氰摹甫 盒硅窍绰版快绰, 颇萍啊 乐绰瘤 茫绰促.
{
AREA *aa = connections[a->GetServerID()].area_tbl;
for( i = 0; i < MAX_AREA_BUFFER; i ++)
{
if( aa[i].bAlive == TRUE )
{
switch( aa[i].Type )
{
case 1:
{
CHARLIST *tt = ::CheckServerId(aa[i].ID);
if (tt != NULL && !tt->IsDead())
{
if( BoxAndDotCrash( a->MoveSx - 15, a->MoveSy - 15, 30, 30, tt->MoveSx, tt->MoveSy ) )
{
for (int i = 0; i < MAX_PARTY_MEMBER; i++)
{
if (a->party[i].On && !stricmp(a->party[i].Name, tt->Name))
{ // 颇萍盔捞瘤 咯何 八荤
if (abs(a->GetLevel() - tt->GetLevel()) <= ENABLE_PARTY_LEVEL)
{ //< CSD-030806 : 饭骇瞒捞啊 35捞窍捞搁 版氰摹 盒硅
goto YES_FIND_PARTY_;
} //> CSD-030806
}
}
continue;
YES_FIND_PARTY_:// 颇萍啊 乐栏搁 tc != 0 捞 等促.
ttt[tc] = tt; tc++;
}
}
break;
}
default: continue;
}
}
}
}
a->ChangeUpAddExp(exp); // CSD-TW-030624
isLevelUp(a);
if( tc )// 牢盔荐俊 蝶弗 焊沥摹甫 利侩茄促.
{
switch( tc )
{
case 1: partyexp = exp*65/100; break;
case 2: partyexp = exp*60/100; break;
case 3: partyexp = exp*55/100; break;
case 4: partyexp = exp*50/100; break;
case 5: partyexp = exp*45/100; break;
case 6: partyexp = exp*40/100; break;
default: goto END_;
}
for( i = 0 ; i < tc ; i ++)
{
switch (ttt[i]->party_select)
{ //< CSD-TW-030624
case 0:
case PS_EXP:
{
ttt[i]->ChangeUpAddExp(partyexp);
isLevelUp(ttt[i]);
break;
}
case PS_TACTIC:
{
ttt[i]->ChangeUpTacExp(5, partyexp*3);
break;
}
case PS_MAGIC_TAC:
{
ttt[i]->ChangeUpTacExp(3, partyexp*3);
break;
}
} //> CSD-TW-030624
}
}
END_:
return exp;
}
//1018 zhh
extern void MakeSealStoneItem(CHARLIST* ach,CHARLIST* dch); // 011213 LTS
extern void AddNPCControlData(int cn,int NPC_ID); // LTS NPC BUG
extern void RemoveNPCControlData(int cn,int NPC_ID); // LTS NPC BUG
extern void CheckNPCControlData(int cn,int NPC_ID); // LTS NPC BUG
// YGI acer 3
extern int g_LocalWarBegin; // 011215 LTS
//////////////////// 0812 lkh 荐沥 //////////////////////
void killCharacter( CHARLIST *a,CHARLIST *d )
{ // 傍拜磊绰 NULL老 荐档 乐澜
// if( a == NULL ) return;
if( d == NULL ) return;
if( d->GetServerID() == LOGIN_SERVER_CONNECT || d->GetServerID() == DB_DEMON ) return;
if( d->bAlive >= DEAD_ ) return;
d->bAlive = DEAD_;
if( d->SprType != SPRITETYPE_NPC )
{
d->deadcount = DEAD_PC_COUNT_;
}
else
{ //< CSD-040407
switch (d->Race)
{
case HUMAN:
{
d->deadcount = DEAD_PC_COUNT_;
break;
}
case ANIMAL:
{
d->deadcount = DEAD_NPC_ANIMAL_COUNT_;
break;
}
case SEALSTONE:
{
d->deadcount = DEAD_SEALSTONE_COUNT_;
break;
}
default:
{ // 档绵捞 阂啊瓷茄 版快绰 府哩矫埃阑 临烙
d->deadcount = (d->Meat_amount > 0) ? DEAD_NPC_MONSTER_COUNT_:DEAD_NPC_HUNT_MONSTER_COUNT_;
break;
}
}
} //> CSD-040407
d->SetState(CON_DEATH);
if (d->IsNpc() && !d->IsTamedNpc())
{
switch (d->generationtype)
{ //< CSD-030417
case GT_EVENT_MONSTER:
{
g_pAIManager->CheckDeath(d); // LTS DRAGON MODIFY
CheckBossAndDeActiveGroupNo(d); // LTS AI2
break;
}
case GT_HUNT_MONSTER:
{
const int nGroup = d->JoinLocalWar;
CRegenInfo* pRegen = g_pRegenManager->GetRegenInfo(nGroup);
if (pRegen != NULL)
{
switch (d->GainedFame)
{
case 0:
case 2: pRegen->DelMember(d); break;
case 1: pRegen->DelMaster(d); break;
}
pRegen->CalcRegenTime();
}
if (g_pArenaManager->IsColossusArena())
{ //< CSD-030522
if (a != NULL && a->IsPlayer())
{
CArenaTeam* pTeam = a->GetJoinArenaTeam();
if (pTeam == NULL)
{
break;
}
pTeam->IncKillCount();
CBaseArena* pGame = a->GetJoinArenaGame();
if (pGame == NULL)
{
break;
}
const int nTeam = pTeam->GetTeamNumber();
const int nCount = pTeam->GetKillCount();
pGame->SendKillCount(nTeam, nCount);
}
} //> CSD-030522
break;
}
} //> CSD-030417
if( d->Race == SEALSTONE )
{
if (a->IsPlayer()) a->GainedFame+=2; // 搬拌籍阑 磷牢 荤恩俊霸 掘阑 疙己摹甫 +2秦霖促.
Send_CMD_SEALSTONE_STATUS( d, 0 );
}
else
{
if (d->Race==GUARDSTONE) // 傈里磐 拌凯
{
UpdateGuardStoneStatus(a,d);
}
SkillMgr.FallItemWhenNPCDie(d);
}
if (!d->ChairNum) // 辑滚 AI啊 酒囱 NPC啊 磷栏搁 官肺 牧飘费 单捞磐甫 秦力茄促. // LTS DRAGON MODIFY
{
int cn=d->ctrlpc;
RemoveNPCControlData(cn,d->GetServerID()); // NPC AI 牧飘费 单捞磐甫 力芭茄促.
}
//1020 zhh //漂沥茄 炼扒阑 爱眠菌阑锭 漂沥茄 酒捞袍 积魂
}
if (d->IsPlayer())
{
ExpDown(a, d, true); // CSD-030314
// 傈里 吝牢 版快 利焙阑 磷牢 荐 吝啊
if (isNationWarfieldServer() && IsWar())
{
CountNationDeath(a, d);
}
if (isNewWarfieldServer() && IsWar())
{
CountNewWarfieldDeath(a,d);
}
CheckLocalWarDeath(a,d); // LTS LOCALWAR
CheckEventLocalWarDeath(a,d); // 020115 LTS
CheckDragonLordWarTeam(a,d); // LTS DRAGONLORD
// 020428 YGI acer 3
if( a )
{
if( a->IsPlayer() || a->IsTamedNpc() ) // 抛怪俊 己傍秦档 家券秦档 IsTamedNpc() 绰 true 捞促.
{ // 穿焙啊甫 磷看促搁 扁废俊 巢扁磊...
CHARLIST *ch = 0;
if( a->IsPlayer() )
{
ch = a;
}
else
{
if (a->IsTamedNpc())
{
// 020620 YGI
CHARLIST *master = GetCharListPtr(a->GetMaster() );
if( master && master->IsPlayer() ) ch = master;
}
}
if( ch )
{
bool bRecord = true;
if (ch->fight_flag == 1 && d->fight_flag == 1 && ch->fight_id == d->GetServerID())
{
bRecord = false;
}
if (isNationWarfieldServer() && IsWar())
{
bRecord = false;
}
if (IsArenaFight(ch))
{ //< CSD-030506
bRecord = false;
} //> CSD-030506
if (g_LocalWarBegin && ch->JoinLocalWar && d->JoinLocalWar)
{
bRecord = false;
}
if( bRecord )
{
char pk_msg[2048] = {0,};
sprintf( pk_msg, "pk : %s(%3d,%3d) [%s](NK:%d,%d,%d)->[%s](NK:%d,%d,%d) ( %02d.%02d %02d:%02d:%02d ) ",
MapName, ch->MoveSx, ch->MoveSy, ch->Name,OutNK(ch,3), OutNK(ch, 4), OutNK(ch, 6),
d->Name,OutNK(d,3), OutNK(d, 4), OutNK(d, 6), g_mon+1, g_day,g_hour, g_min, g_sec );
// 030506 YGI
string strPath;
if (g_pLogManager->GetLogPath(strPath))
{ //< CSD-TW-030701
char temp_path[80];
sprintf( temp_path, "%s/pk.txt", strPath.c_str());
SaveLogDefault(temp_path, pk_msg, 0);
} //> CSD-TW-030701
}
}
}
}
}
d->Hp = 0;
d->Mana = 0;
d->Hungry= 0;
d->MoveLength = d->MovePathCount = 0;
d->cur_skillno = 0; // 噶距 扁贱阑 矫傈吝捞菌栏搁....
//021030 YGI
extern void CheckEventWhenKillMonster( CHARLIST *pKiller, CHARLIST *pNpc );
if( d->IsNpc() )
{
CheckEventWhenKillMonster( a, d );
}
if( a == NULL ) return;
if( a->GetServerID() == LOGIN_SERVER_CONNECT || a->GetServerID() == DB_DEMON ) return;
// 021023 kyo npc磷牢 墨款磐甫 技绊 乐阑锭
if (a && d->IsNpc())
{
//某腐磐啊 磷看芭唱 某腐磐狼 家券荐啊 磷看芭唱.
CHARLIST *ch = a;
if (a->IsSummonMonster())
{
const WORD idMaster = a->GetMaster();
ch = GetCharListPtr(idMaster);
}
g_QuestInMap.RunScriptCounter( ch->GetServerID(), ch->Name, d->npc_index, SCRIPT_COUNTER_TYPE__NPCKILL );
g_QuestInMap.GiveRequitalAfterKillNpc( ch, d ); // 021106 kyo
}
// 穿啊 磷看绰瘤 利绢 敌促.
if (a->IsSummonMonster())
{
char szBuffer[40];
const WORD idMaster = a->GetMaster();
// 020620 YGI
LPCHARLIST pMaster = GetCharListPtr(idMaster);
if( pMaster )
{
sprintf(szBuffer, "%s(%s)", a->Name, pMaster->Name);
strcpy(d->KillerName, szBuffer);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -