KAYNAK KOD ClanWars Paylaşım (Alıntıdır)

Admin

Kurucu Admin
Katılım
22 Ara 2020
Mesajlar
497
Çözümler
1
Tepkime puanı
14,330
Puanları
160
Konum
Kütahya
Web
ko-yardim.com
Arkadaşlar ihtiyacı olan olabilir .

User.h-> Uygun biryere ekleyelim


COMMAND_HANDLER(HandleClanWarStartCommand);
COMMAND_HANDLER(HandleClanWarCloseCommand);


ChatHandler.cpp->InıtChatCommand fonksiyonu içerisine

Kod:


{ "startclanwar", &CUser::HandleClanWarStartCommand, "Start Clan War (+startclanwar Clan1 Clan2" },

{ "closeclanwar", &CUser::HandleClanWarCloseCommand,




ChatHandler.cpp-> En Alt kısma

Kod:


COMMAND_HANDLER(CUser::HandleClanWarStartCommand)
{
if (!isGM())
return false;

if (vargs.size() < 2)
return false;

std::string ClanName1 = vargs.front();
vargs.pop_front();

std::string ClanName2 = vargs.front();
vargs.pop_front();

g_pMain->ClanWarStarted(ClanName1, ClanName2);

return true;
}

COMMAND_HANDLER(CUser::HandleClanWarCloseCommand)
{
if (!isGM())
return false;

g_pMain->ClanWarFinished();

return true;
}




GameServerDlg.h-> içerisinde uygun bir alana ekleyelim

Kod:


uint16 ClanWarDeathCountClan1;
uint16 ClanWarDeathCountClan2;
uint16 ClanID1, ClanID2;
uint8 ClanWarRemaingTime;
bool isClanWarStart;
void ClanWarFinished();
void ClanWarStarted(std::string ClanName1,std::string ClanName2);
void SendTerminator(uint16 ClanWarRemainingTime,uint8 ZoneID);
bool isClanWarAttackActive;
std::string ClanWarName1, ClanWarName2;



GameServerDlg.cpp-> En alt Kısmına.

Kod:


void CGameServerDlg::ClanWarStarted(string ClanName1,string ClanName2)
{
foreach_stlmap(itr, g_pMain->m_KnightsArray)
{
if (itr->second->GetName() == ClanName1.c_str())
{
g_pMain->ClanID1 = itr->second->GetID();
g_pMain->ClanWarName1 = itr->second->GetName();
}
if (itr->second->GetName() == ClanName2.c_str())
{
g_pMain->ClanID2 = itr->second->GetID();
g_pMain->ClanWarName2 = itr->second->GetName();
}
}

_START_POSITION * pStartPosition = g_pMain->GetStartPosition(ZONE_ARDREAM_CLAN_WAR);
SessionMap sessMap = g_pMain->m_socketMgr.GetActiveSessionMap();

foreach(itr, sessMap)
{
if ((TO_USER(itr->second)->isInGame() && TO_USER(itr->second)->GetClanID() == ClanID1) || (TO_USER(itr->second)->isInGame() && TO_USER(itr->second)->GetClanID() == ClanID2))
{
TO_USER(itr->second)->ZoneChange(ZONE_ARDREAM_CLAN_WAR,
(float)(TO_USER(itr->second)->GetNation() == KARUS ? pStartPosition->sKarusX : pStartPosition->sElmoradX + myrand(0, pStartPosition->bRangeX)),
(float)(TO_USER(itr->second)->GetNation() == KARUS ? pStartPosition->sKarusZ : pStartPosition->sElmoradZ + myrand(0, pStartPosition->bRangeZ)), 0);
}
}
printf("Clan War Event Started !\n");
g_pMain->isClanWarStart = true;
g_pMain->isClanWarAttackActive = false;
}

void CGameServerDlg::ClanWarFinished()
{
std::string WinMessage;
g_pMain->isClanWarAttackActive = false;
g_pMain->isClanWarStart = false;

if (g_pMain->ClanWarDeathCountClan1 > g_pMain->ClanWarDeathCountClan2)
WinMessage = ("Winner Clan : %s Congratulations !", g_pMain->ClanWarName2.c_str());
else if (g_pMain->ClanWarDeathCountClan2 > g_pMain->ClanWarDeathCountClan1)
WinMessage = ("Winner Clan : %s Congratulations ", g_pMain->ClanWarName1.c_str());
else
WinMessage = ("Clan War Drawn OUT !");

SendAnnouncement(WinMessage.c_str());
SendNotice(WinMessage.c_str());
KickOutZoneUsers(ZONE_ARDREAM_CLAN_WAR, ZONE_MORADON);
g_pMain->ClanWarDeathCountClan1 = 0;
g_pMain->ClanWarDeathCountClan2 = 0;
g_pMain->ClanWarRemaingTime = 35;
printf("Clan War Event Finished !\n");
}

void CGameServerDlg::SendTerminator(uint16 remainingTime,uint8 ZoneID)
{
Packet Inventory(WIZ_EVENT);
Inventory << uint8(1);

Packet aresult(WIZ_SELECT_MSG);
aresult << uint16(0) << uint8(7)
<< uint32(0) << uint32(0)
<< uint8(8) << uint16(0)
<< uint8(0) << uint8(0x07)
<< remainingTime << uint16(0);

Packet bresult(WIZ_BIFROST);
bresult << uint8(0x05) << remainingTime;

Packet cresult(WIZ_EVENT);
cresult << uint8(0x03) << uint32(0) << uint32(0) << uint32(0x05008504) << uint8(0);

SessionMap sessMap = g_pMain->m_socketMgr.GetActiveSessionMap();

foreach(itr, sessMap)
{
if ((TO_USER(itr->second)->isInGame() && TO_USER(itr->second)->GetZoneID() == ZoneID))
{
cresult << (TO_USER(itr->second)->GetName()) << uint32(0);
TO_USER(itr->second)->Send(&Inventory);
TO_USER(itr->second)->Send(&aresult);
TO_USER(itr->second)->Send(&bresult);
TO_USER(itr->second)->SendToRegion(&cresult, nullptr, TO_USER(itr->second)->GetEventRoom());
}
}
}


GameServerDlg.cpp-> Timer_CheckGameEvent Fonksiyonundaki while bloğu içerisine.



Code:


if (g_pMain->isClanWarStart == true && g_pMain->ClanWarRemaingTime == 0)
g_pMain->ClanWarFinished();



GameServerDlg.cpp-> UpdateGameTime Fonksiyonu içerindeki if (m_sMin != now.GetMinute()) koşulunun içerisine.


Code:


if (g_pMain->isClanWarStart == true)
{
if (g_pMain->ClanWarRemaingTime == 30)
{
SendNotice("Clan War Event Started !");
g_pMain->isClanWarAttackActive = true;
g_pMain->SendTerminator((g_pMain->ClanWarRemaingTime * 58), ZONE_ARDREAM_CLAN_WAR);
}
g_pMain->ClanWarRemaingTime--;
}



GameServerDlg.cpp -> constructor içerisine.

Code:


ClanWarDeathCountClan1 = 0;
ClanWarDeathCountClan2 = 0;
isClanWarStart = false;
ClanWarRemaingTime = 35 ;
isClanWarAttackActive = false;



user.cpp->OnDeath->if (pKiller->isNPC()) bloğunun else bölümüne


else if (GetZoneID() == ZONE_ARDREAM_CLAN_WAR)
{
if (GetNation() == 1 && g_pMain->isClanWarAttackActive == true)
g_pMain->ClanWarDeathCountClan1++;
if (GetNation() == 2 && g_pMain->isClanWarAttackActive == true)
g_pMain->ClanWarDeathCountClan2++;
}


MagicInstance.cpp-> Run fonksiyonun içerisine.


if (pSkillCaster->GetZoneID() == ZONE_ARDREAM_CLAN_WAR && g_pMain->isClanWarAttackActive == false)
{
SendSkillFailed();
return;
}



SQL KISMI


ZONE_INFO

Kod:
1 77 dragon_a.smd 13900 13900 0 0 0 Ardream Clan War


START_POSITION

Kod:
77 770 489 222 252 816 524 189 574 5 5
 
Reklam