⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 op_battle.cpp

📁 国内著名网络游戏dragon的服务端完整源码 内附完整数据库结构
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			{
				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 + -