Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "scriptPCH.h"
- #include "MapManager.h"
- #include "Chat.h"
- /* SQL (Only if you use Rating System) (Characters database)
- UPDATE `characters` create `duelW` int(10) unsigned NOT NULL DEFAULT '0';
- UPDATE `characters` create `duelL` int(10) unsigned NOT NULL DEFAULT '0';
- UPDATE `characters` create `duelR` int(10) unsigned NOT NULL DEFAULT '1000';
- */
- /*
- Ultimate Duel Script (Reward/Rating/Phasing/Security/Zoned & Reset)
- Author : Philippe
- Release Date : 14/01/14
- Script Complete : 100 %
- Version : 3.3.5 & 4.3.4
- TrinityCore based.
- Tested on 4.3.4 Works Well
- Note :
- Phasing system isn't done by me, Credits go to Deathmane1337 (Ac-Web).
- Reward Part is explain you need to read.
- For the Rating system please use SQL given. You can add a Top for you're website or create a rating npc.
- */
- enum Rewards
- {
- Currency_token = 241 // Enter you're reward Item ID (Wotlk/Cata) or Currency ID (Cata)
- };
- enum Zone_ID
- {
- Zone_ID_1 = 1 // Change Zone ID
- };
- enum Area_ID
- {
- Area_ID_1 = 1 // Change Area ID
- };
- void RevivePlayer(Player* player)
- {
- player->SetHealth(player->GetMaxHealth());
- if(player->getPowerType() == POWER_MANA)
- player->SetPower(POWER_MANA, player->GetMaxPower(POWER_MANA));
- if(player->getPowerType() == POWER_ENERGY)
- player->SetPower(POWER_ENERGY, player->GetMaxPower(POWER_ENERGY));
- }
- class Reset_OnDuelEnd : public PlayerScript
- {
- public:
- Reset_OnDuelEnd() : PlayerScript("Reset_OnDuelEnd") {}
- void OnDuelEnd(Player *player, Player * plTarget, DuelCompleteType type)
- {
- player->RemoveAllSpellCooldown();
- plTarget->RemoveAllSpellCooldown();
- RevivePlayer(player);
- RevivePlayer(plTarget);
- player->CombatStop();
- plTarget->CombatStop();
- player->InterruptSpell(CURRENT_AUTOREPEAT_SPELL); // break Auto Shot and autohit
- plTarget->InterruptSpell(CURRENT_CHANNELED_SPELL); // break channeled spells
- player->AttackStop();
- plTarget->AttackStop();
- }
- };
- class Reset_OnDuelStart : public PlayerScript
- {
- public:
- Reset_OnDuelStart() : PlayerScript("OnDuelStart") {}
- void OnDuelStart(Player *player, Player *plTarget)
- {
- // Duel Start Reset (Hp/Mana etc)
- RevivePlayer(player);
- RevivePlayer(plTarget);
- player->SetPower(POWER_RAGE, 0);
- plTarget->SetPower(POWER_RAGE, 0);
- player->SetPower(POWER_RUNIC_POWER, 0);
- plTarget->SetPower(POWER_RUNIC_POWER, 0);
- }
- };
- class Duel_Token_Reward : public PlayerScript
- {
- public:
- Duel_Token_Reward() : PlayerScript("Duel_Token_Reward") { }
- void OnDuelEnd(Player *winner, Player *looser, DuelCompleteType type)
- {
- if ((winner->GetZoneId() == Zone_ID_1 && looser->GetZoneId() == Zone_ID_1 || winner->GetAreaId() == Area_ID_1 && looser->GetAreaId() == Area_ID_1) && type == DUEL_WON)
- {
- if (winner->getLevel() >= 1 && looser->getLevel() <= 79 && (type == DUEL_WON || type == DUEL_INTERRUPTED || type == DUEL_FLED))
- {
- return;
- }
- // Check Latency of both (Not Really needed)
- if (looser->GetSession()->GetLatency() > 350 && (type == DUEL_WON || type == DUEL_INTERRUPTED || type == DUEL_FLED))
- {
- ChatHandler(winner->GetSession()).PSendSysMessage("|cFFFFFC00[System]|cFF00FFFF !! ALERT !! One of you has a latency superior to 350");
- ChatHandler(looser->GetSession()).PSendSysMessage("|cFFFFFC00[System]|cFF00FFFF !! ALERT !! One of you has a latency superior to 350");
- return;
- }
- // Used if player didin't reach less than 10 life.
- if (looser->GetHealth() > 10)
- {
- ChatHandler(looser->GetSession()).PSendSysMessage("|cFFFFFC00[System]|cFF00FFFF No one killed the other !");
- ChatHandler(winner->GetSession()).PSendSysMessage("|cFFFFFC00[System]|cFF00FFFF No one killed the other !");
- return;
- }
- // Used For Test Versus GM
- if (looser->GetSession()->GetSecurity() >= 2 && (type == DUEL_WON || type == DUEL_INTERRUPTED || type == DUEL_FLED))
- {
- ChatHandler(winner->GetSession()).PSendSysMessage("|cFFFFFC00[System]|cFF00FFFF You Can't Claim Reward When you're vs a GameMaster !");
- ChatHandler(looser->GetSession()).PSendSysMessage("|cFFFFFC00[System]|cFF00FFFF You Can't Claim Reward When you're vs a GameMaster !" );
- return;
- }
- if (winner->GetSession()->GetSecurity() >= 2 && (type == DUEL_WON || type == DUEL_INTERRUPTED || type == DUEL_FLED))
- {
- ChatHandler(winner->GetSession()).PSendSysMessage("|cFFFFFC00[System]|cFF00FFFF You Can't Claim Reward When you're vs a GameMaster !");
- ChatHandler(looser->GetSession()).PSendSysMessage("|cFFFFFC00[System]|cFF00FFFF You Can't Claim Reward When you're vs a GameMaster !");
- return;
- }
- // Used for Cata user if player dosen't have enough gear equipped based on (Stamina/life)
- // *Could be adapted for Wotlk Users.
- if (looser->GetStat(STAT_STAMINA) < 4000 && type == DUEL_WON)
- {
- ChatHandler(winner->GetSession()).PSendSysMessage("|cFFFFFC00[Cheating System]|cFF00FFFF The player you are fighting dosen't have enough gear equipped !");
- ChatHandler(looser->GetSession()).PSendSysMessage("|cFFFFFC00[Cheating System]|cFF00FFFF you don't have enough gear equipped !");
- return;
- }
- // Used for Local Connections, same IP
- if (winner->GetSession()->GetRemoteAddress() == looser->GetSession()->GetRemoteAddress())
- {
- ChatHandler(winner->GetSession()).SendGlobalGMSysMessage("|cFFFFFC00[Cheating System]|cFF00FFFF A player is trying to cheat in duel Area !");
- ChatHandler(winner->GetSession()).PSendSysMessage("|cFFFFFC00[Cheating System]|cFF00FFFF you can't claim reward vs a same ip !");
- ChatHandler(looser->GetSession()).PSendSysMessage("|cFFFFFC00[Cheating System]|cFF00FFFF you can't claim reward vs a same ip !");
- }
- //If everything is passed then reward will be.
- else
- {
- //Remove The /*-*/ Where are Code line to make it works.
- /*--------------Cataclysm Users------------*/
- /* CODE
- winner->ModifyCurrency(currency_token, 2 , true,true, false);
- looser->ModifyCurrency(currency_token, 1 , true,true, false);
- */
- /*----------------Wotlk Users---------------*/
- /* CODE
- winner->AddItem(Currency_token, 2);
- looser->AddItem(Currency_token, 1);
- */
- winner->SaveToDB();
- looser->SaveToDB();
- /*
- /*Duel Rating*/
- //Duel Ratio, Win/lose
- /* CODE
- CharacterDatabase.PExecute("UPDATE characters SET duelW = (duelW+1) WHERE guid = '%u'", winner->GetGUID());
- CharacterDatabase.PExecute("UPDATE characters SET duelL = (duelL+1) WHERE guid = '%u'", looser->GetGUID());
- //Duel Rating, Win/lose (Change Points Manually)
- CharacterDatabase.PExecute("UPDATE characters SET duelR = (duelR+14') WHERE guid = '%u'", winner->GetGUID());
- CharacterDatabase.PExecute("UPDATE characters SET duelR = (duelR-7') WHERE guid = '%u'", looser->GetGUID());
- //Duel Announcement, Win/lose (Change Points Manually.
- ChatHandler(winner).SendSysMessage("|cFFFFFC00[System]|cFF00FFFF Well done you won 14 Points !");
- ChatHandler(looser).SendSysMessage("|cFFFFFC00[System]|cFF00FFFF Ow you lose 7 Points !");
- */
- }
- }
- }
- };
- class PhasedDueling : public PlayerScript
- {
- public:
- PhasedDueling() : PlayerScript("PhasedDueling") { }
- void OnDuelStart(Player* firstplayer, Player* secondplayer)
- {
- uint32 PlayersInsidePhase = 0;
- uint32 PhaseToCheck = 1;
- Map* map = sMapMgr->FindMap(firstplayer->GetMapId(), firstplayer->GetInstanceId());
- if (!map)
- return;
- Map::PlayerList const& players = map->GetPlayers();
- for (Map::PlayerList::const_iterator iter = players.begin(); iter != players.end(); ++iter)
- {
- Player* check = iter->GetSource();
- if (!check || !check->GetSession())
- continue;
- if (check->GetPhaseMask() == PhaseToCheck)
- {
- ++PlayersInsidePhase;
- ++PhaseToCheck;
- PlayersInsidePhase = 0;
- }
- }
- if (PlayersInsidePhase == 0)
- {
- firstplayer->SetPhaseMask(PhaseToCheck, true);
- secondplayer->SetPhaseMask(PhaseToCheck, true);
- }
- }
- void OnDuelEnd(Player* firstplayer, Player* secondplayer)
- {
- uint32 PlayersInsidePhase = 0;
- uint32 PhaseToCheck = 1;
- Map* map = sMapMgr->FindMap(firstplayer->GetMapId(), firstplayer->GetInstanceId());
- if (!map)
- return;
- Map::PlayerList const& players = map->GetPlayers();
- for (Map::PlayerList::const_iterator iter = players.begin(); iter != players.end(); ++iter)
- {
- Player* check = iter->GetSource();
- if (!check || !check->GetSession())
- continue;
- if (check->GetPhaseMask() == PhaseToCheck)
- {
- ++PlayersInsidePhase;
- ++PhaseToCheck;
- PlayersInsidePhase = 0;
- }
- }
- if (PlayersInsidePhase == 0)
- {
- firstplayer->SetPhaseMask(PhaseToCheck, false);
- secondplayer->SetPhaseMask(PhaseToCheck, false);
- }
- }
- };
- void AddSC_Reset()
- {
- new Duel_Token_Reward();
- new Reset_OnDuelEnd();
- new Reset_OnDuelStart();
- new PhasedDueling();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement