⏩ OldSchoolKO ✅ | " VALHALLA " 2.000.000 TL ÖDÜL ⭐ 3 YIL ARADAN SONRA ✅ v.1098 MYKO EFSANESİ ⚔ OFFICIAL 17.05.2024 - 21:00 ⏪
Cuceko

[Savaş, Guard Summon]

  •         

            

            

            

            

  • HyperFilter | DoS Protection | DDoS Protection | DoS Mitigation | DDoS Mitigation | AntiDoS | AntiDDoS | Proxy Shielding
B Çevrimdışı

BonezCrusher

Kayıtlı Üye
26 Aralık 2013
239
0
16
37
İçerik Açılmıştır Teşekkürler :)
Guard Summon Sahibine Attack Yapması Engellendi.

Savaş Zamanları İle İlgili Problem Giderildi.

Eksik Lua Komutlari Eklendi.

Lua Üzerinde Düzenlemeler Yapildi.

AiServer Patlama Sorunu Düzeltildi.



Kod:
local Ret = 0;

local NPC = 10305;



if EVENT == 165 then

   Nation = CheckNation(UID)

   if Nation == 2 then

	   SelectMsg(UID, 2, -1, 4632, NPC, 10, 168);        

   else

	   Capture = CheckMiddleStatueCapture(UID)

	   if Capture == 1 then

		   SelectMsg(UID, 2, -1, 4634, NPC, 4226, 169, 4227, 168);        

	   else

		   SelectMsg(UID, 2, -1, 4633, NPC, 10, 168);        

	   end

   end

end



if EVENT == 168 then

   Ret = 1;

end



if EVENT == 169 then

   MoveMiddleStatue(UID)

end



AIServer/Npc.cpp Kısmından...



void CNpc::TracingAttack Bu Bölümü...



Kod:
void CNpc::TracingAttack()

  		if (pUser == nullptr

  			|| pUser->isDead()

  			|| pUser->m_bInvisibilityType

			|| pUser->isGM() 

 			|| !GetMap()->canAttackOtherNation() 

			|| pUser->m_oSocketID == m_oSocketID)

  			return;



Bununla Değiştiriyoruz...



GameServer/Define.h icine Girip Şu Satırları Ekliyoruz..



Kod:
// Where to respawn after dying in the Moradon arenas

#define MINI_ARENA_RESPAWN_X		734

#define MINI_ARENA_RESPAWN_Z		427

#define MINI_ARENA_RESPAWN_RADIUS	5



// Where to Warp dodo or laon camp in the enemy nation zone

#define DODO_CAMP_WARP_X			1059

#define DODO_CAMP_WARP_Z			1143

#define LAON_CAMP_WARP_X			1016

#define LAON_CAMP_WARP_Z			918

#define DODO_LAON_WARP_RADIUS		5



GameServer/GameServerDlg.cpp Aşagıdakiler'le Değiştiriyoruz..



Kod:
uint32 CGameServerDlg::Timer_UpdateGameTime(void * lpParam)

{

	while (g_bRunning)

	{

		g_pMain->UpdateGameTime();



		if (++g_pMain->m_sErrorSocketCount > 3)

			g_pMain->AIServerConnect();



		sleep(1 * SECOND);

	}

	return 0;

}



Kod:
void CGameServerDlg::BattleZoneOpenTimer()

{

	int nWeekDay = g_localTime.tm_wday;

	int nHour = g_localTime.tm_hour;



	if (m_byBattleOpen == NO_BATTLE)

	{

		std::list<std::string> vargs = StrSplit(m_nBattleZoneOpenDays, ",");

		uint8 nDaySize = vargs.size();

		if (nDaySize > 0)

		{

			uint8 nDay = 0;

			for (int i = 0; i < nDaySize; i++)

			{

				nDay = atoi(vargs.front().c_str());

				if (nDay == nWeekDay)

					for (int x = 0; x < WAR_TIME_COUNT; x++)

						if (m_nBattleZoneOpenHourStart[x] == nHour)

							BattleZoneOpen(BATTLEZONE_OPEN, m_nBattlezoneOpenWarZone[x]);

				vargs.pop_front();

			}

		}

	}

	else if (m_byBattleOpen == NATION_BATTLE)	

	{

		BattleZoneCurrentUsers();



		int32 WarElapsedTime = int32(UNIXTIME) - m_byBattleOpenedTime;

		m_byBattleRemainingTime = m_byBattleTime - WarElapsedTime;

		uint8 nBattleZone = g_pMain->m_byBattleZone + ZONE_BATTLE_BASE;



		if (m_bVictory == 0)

		{

			if (WarElapsedTime == (m_byBattleTime / 24)) // Select captain

			{

				m_KnightsRatingArray[KARUS_ARRAY].DeleteAllData();

				m_KnightsRatingArray[ELMORAD_ARRAY].DeleteAllData();

				LoadKnightsRankTable(true);

			}

			else if (WarElapsedTime == (m_byBattleTime / 8)) // War half time + 15 minutes for Nereid's Island.

			{

				if (nBattleZone == ZONE_BATTLE4) // Nereid's Island

				{

					if (m_sKarusMonuments >= 7 && m_sElmoMonuments == 0)

						BattleZoneResult(KARUS);

					else if (m_sKarusMonuments == 0 && m_sElmoMonuments >= 7)

						BattleZoneResult(ELMORAD);

				}

			}

			else if (WarElapsedTime == (m_byBattleTime / 2)) // War half time.

			{

				if (nBattleZone == ZONE_BATTLE

					|| nBattleZone == ZONE_BATTLE2 

					||nBattleZone == ZONE_BATTLE3)

					BattleWinnerResult(BATTLE_WINNER_NPC);

				else if (nBattleZone == ZONE_BATTLE4) // Nereid's Island

					BattleWinnerResult(BATTLE_WINNER_MONUMENT);

				else if (nBattleZone == ZONE_BATTLE6) // Oreads

					BattleWinnerResult(BATTLE_WINNER_KILL);

			}



			m_sBattleTimeDelay++;



			if (m_sBattleTimeDelay >= (nBattleZone == ZONE_BATTLE4 ? (m_byBattleTime / 48) : (m_byBattleTime / 24)))

			{

				m_sBattleTimeDelay = 0;

				Announcement(DECLARE_BATTLE_ZONE_STATUS);

			}

		}

		else

		{

			if (WarElapsedTime <  m_byBattleTime) // Won the war.

			{

				m_sBattleTimeDelay++;



				if (m_sBattleTimeDelay >= (m_byBattleTime / 24))

				{

					m_sBattleTimeDelay = 0;

					Announcement(UNDER_ATTACK_NOTIFY);

				}



				CheckNationMonumentRewards();

			}

		}



		if (WarElapsedTime >= m_byBattleTime) // War is over.

			BattleZoneClose();

	}



	if (m_byBanishFlag)

	{

		m_sBanishDelay++;



		if (m_sBanishDelay == (m_byBattleTime / 360))

			Announcement(DECLARE_BAN);

		else if (m_sBanishDelay == (m_byBattleTime / 120)) {

			m_byBanishFlag = false;

			m_sBanishDelay = 0;

			BanishLosers();

		}

	}

}



GameServer/GameServerDlg.h Aşagıdakiler'le Değiştiriyoruz..



Kod:
uint8   m_byBattleOpen, m_byOldBattleOpen;					// 0:전쟁중이 아님, 1:전쟁중(국가간전쟁), 2:눈싸움전쟁

	uint8	m_byBattleZone,m_byBattleZoneType,m_bVictory, m_byOldVictory, m_bKarusFl*** m_bElmoradFl*** m_bMiddleStatueNation;

	int32	m_byBattleOpenedTime;

	int32	m_byBattleTime;

	int32	m_byBattleRemainingTime;

	int32	m_sBattleTimeDelay;

	uint8	m_sKilledKarusNpc, m_sKilledElmoNpc;

	uint8	m_sKarusMonuments, m_sElmoMonuments;

	uint16	m_sKarusMonumentPoint, m_sElmoMonumentPoint;

	bool    m_byKarusOpenFl*** m_byElmoradOpenFl*** m_byBanishFl*** m_byBattleSave;



GameServer/LuaEngine.cpp Kısmına Şu Satırlari Ekliyoruz..



Kod:
MAKE_LUA_FUNCTION(CheckWarVictory)

						  MAKE_LUA_FUNCTION(CheckMiddleStatueCapture)

						  MAKE_LUA_FUNCTION(MoveMiddleStatue)



GameServer/Npc.cpp void CNpc::OnRespawn Bu Kısımı Aşağidakiyle Değiştiriyoruz.



Kod:
void CNpc::OnRespawn()

{

	if (g_pMain->m_byBattleOpen == NATION_BATTLE 

		&& (m_sSid == ELMORAD_MONUMENT_SID

		|| m_sSid == ASGA_VILLAGE_MONUMENT_SID

		|| m_sSid == RAIBA_VILLAGE_MONUMENT_SID

		|| m_sSid == DODO_CAMP_MONUMENT_SID

		|| m_sSid == LUFERSON_MONUMENT_SID

		|| m_sSid == LINATE_MONUMENT_SID

		|| m_sSid == BELLUA_MONUMENT_SID

		|| m_sSid == LAON_CAMP_MONUMENT_SID))

	{

		_MONUMENT_INFORMATION * pData = new	_MONUMENT_INFORMATION();

		pData->sSid = m_sSid;

		pData->sNid = m_sNid;

		pData->RepawnedTime = int32(UNIXTIME);



		if (m_sSid == DODO_CAMP_MONUMENT_SID || LAON_CAMP_MONUMENT_SID)

			g_pMain->m_bMiddleStatueNation = m_bNation; 



		if (!g_pMain->m_NationMonumentInformationArray.PutData(pData->sSid, pData))

			delete pData;

	}

}



GameServer/QuestHandler.cpp En Alt Kısıma Şu Satırlari Ekliyoruz..



Kod:
uint8 CUser::GetBeefRoastVictory() { return g_pMain->m_BifrostVictory; }



uint8 CUser::GetWarVictory() { return g_pMain->m_bVictory; }



uint8 CUser::CheckMiddleStatueCapture() { return g_pMain->m_bMiddleStatueNation; }



void CUser::MoveMiddleStatue() { Warp((GetNation() == KARUS ? DODO_CAMP_WARP_X : LAON_CAMP_WARP_X) + myrand(0, DODO_LAON_WARP_RADIUS) * 10,(GetNation() == KARUS ? DODO_CAMP_WARP_Z : LAON_CAMP_WARP_Z) + myrand(0, DODO_LAON_WARP_RADIUS) * 10); }



GameServer/Unit.h İcerisine Girip Şu Satırlari siliyoruz.

Kod:
// Guard Summmon

uint16 m_sGuardSummonNid;



GameServer/User.cpp İcerisine Girip Şununla Değiştiriyoruz.



Kod:
void CUser::SendLoyaltyChange(int32 nChangeAmount /*= 0*/, bool bIsKillReward /*

  			{

  				if (nChangeAmountLoyaltyMonthly > 40)

  					nChangeAmountLoyaltyMonthly += 20;

				else if (nChangeAmountLoyaltyMonthly >= 20 && nChangeAmountLoyaltyMonthly < 40)

  					nChangeAmountLoyaltyMonthly += 10;

  

  				if (amt > m_iLoyaltyMonthly)



Kod:
void CUser::SendLoyaltyChange(int32 nChangeAmount /*= 0*/, bool bIsKillReward /*

  			{

  				if (nChangeAmountLoyaltyMonthly > 40)

  					nChangeAmountLoyaltyMonthly -= 20; 

				else if (nChangeAmountLoyaltyMonthly >= 20 && nChangeAmountLoyaltyMonthly < 40)

  					nChangeAmountLoyaltyMonthly -= 10;

  

  				if (m_iLoyaltyMonthly + nChangeAmountLoyaltyMonthly > LOYALTY_MAX)

GameServer/User.h icerisine girip Şu Satırlari Ekliyoruz.

Kod:
INLINE uint16 GetActiveQuestID() { return m_sEventDataIndex; }

	uint8 GetClanGrade();

	uint8 GetClanRank();

	uint32 GetClanPoint();

	void SendClanPointChange(int32 nChangeAmount = 0);

	uint8 GetBeefRoastVictory();

	uint8 GetRankReward(bool isMonthly);

	uint8 GetWarVictory();

	uint8 CheckMiddleStatueCapture();

	void MoveMiddleStatue();

Kod:
DECLARE_LUA_FUNCTION(CheckMiddleStatueCapture) {

		LUA_RETURN(LUA_GET_INSTANCE()->CheckMiddleStatueCapture());

	}



	DECLARE_LUA_FUNCTION(MoveMiddleStatue) {

		LUA_NO_RETURN(LUA_GET_INSTANCE()->MoveMiddleStatue());

	}



GameServer/lua_bindings.cpp icerisine Şu Satırlari ekliyoruz..

Kod:
MAKE_LUA_METHOD(CheckMiddleStatueCapture)

MAKE_LUA_METHOD(MoveMiddleStatue)

Kod:
_LUA_WRAPPER_USER_FUNCTION(CheckMiddleStatueCapture, CheckMiddleStatueCapture);

 _LUA_WRAPPER_USER_FUNCTION(MoveMiddleStatue, MoveMiddleStatue);

Son olarak. GameServer/lua_bindings.h icerisine Girip Şu Satırlari Ekliyoruz..

Kod:
LUA_FUNCTION(CheckMiddleStatueCapture);

 LUA_FUNCTION(MoveMiddleStatue);