Модератор форума: Dimitro |
Форум TrinityCore Патчи / Моды / Фиксы для Trinity C++ fun script - Король лич должен существовать всегда |
C++ fun script - Король лич должен существовать всегда |
Ясное дело...
На нее рег по другому осуществляется... И вообще, не пойму, зачем эта комманда, когда один бегаешь еще норм, но на серве ее юзать... Есть же battleground_template таблица...
Arcanum Core © Dev.
Для запросов на выдачу наград/снятие замечаний есть темы в Работе Портала. Не пишите по этому поводу в личку.
Сообщение # 31 написано 23.10.2011 в 13:19
|
а скрипт почему срабатывает только один раз, вот закончилось бг всё вышли всё забрали морф и вещь, потом опять регаемся на ущелье а он уже не морфает и шмотку не даёт, а почему, и как исправить можно подскажите ?
Новый сервер - http://lk-wow.ru
Сообщение # 32 написано 28.10.2011 в 02:02
|
Добавьте в одну из функций окончания варсонга lich_exists = false; и будет вам счастье)
Arcanum Core © Dev.
Для запросов на выдачу наград/снятие замечаний есть темы в Работе Портала. Не пишите по этому поводу в личку.
Сообщение # 33 написано 28.10.2011 в 02:09
|
А еще лучше, реализуйте сохранение этого значения через базу.
Arcanum Core © Dev.
Для запросов на выдачу наград/снятие замечаний есть темы в Работе Портала. Не пишите по этому поводу в личку.
Сообщение # 34 написано 28.10.2011 в 02:10
|
Quote (nrj45) помоги пожалуйста, очень прошу тебя Добавлено (28.10.2011, 02:17) --------------------------------------------- lich_exists = true; стоит её чтоли изменить или куда добавить ? изменить на lich_exists = false; |
Не-не-не, ничего менять не надо, там все правильно.
Надо просто немного переписать, я сейчас не могу, видуха горелая, сижу не со своего компа, неудобно.
Arcanum Core © Dev.
Для запросов на выдачу наград/снятие замечаний есть темы в Работе Портала. Не пишите по этому поводу в личку.
Сообщение # 37 написано 28.10.2011 в 04:42
|
Quote (Dimitro) Не-не-не, ничего менять не надо, там все правильно. Надо просто немного переписать, я сейчас не могу, видуха горелая, сижу не со своего компа, неудобно. отписал в лс прочитай плз, будим ждать нового патча Добавлено (19.03.2012, 00:40)
Новый сервер - http://lk-wow.ru
Сообщение # 38 написано 19.03.2012 в 00:40
|
Quote (The_Sun) Надо кучу триггеров в Городах раставить, если король города сдох, заселить его NPC противоложной фракции... или просто сделать фазовую систему. и Worldstates. но, по моему бред это уже реально реализовано в патче City Conquest
Сообщение # 41 написано 19.03.2012 в 16:31
|
Прошу прощения, но школьник идет на врыв. Ни языка не понимаю, ни гайдов не читаю, просто разбираю чужой кот и пытаюсь осмыслить что и как тут делается... но не суть... Извините, если что.
Не подскажете, можно ли проверку на Класс персонажа (и выдачу вещи по этому классу) написать вот так: Code + if (!lich_exists) + { + plr->SetDisplayId(24191);//Lich King + plr->Whisper("Король-Лич должен существовать всегда...", LANG_UNIVERSAL, plr->GetGUID()); + plr->Whisper("Вы можете найти ледяную скорбь в своем инвертаре...", LANG_UNIVERSAL, plr->GetGUID()); + int playerClass = player->getClass(); + switch (playerClass) + { + case CLASS_WARLOCK: + plr->AddItem(FROSTMOURNE1_ID, 1); + break; .................................................... + case CLASS_WARRIOR: + plr->AddItem(FROSTMOURNE2_ID, 1); + break; + } + lichGUID = plr->GetGUID(); + lich_exists = true; + } FROSTMOURNE1_ID /FROSTMOURNE2_ID это я догадаюсь где добавить) там где много точечек - там однотипное "если этот класс то дать эту вещь; break;" Сам вопрос именно на счет проверки... где то видел где то слышал... можно ли так? и что такое "int" в записи "int playerClass = player->getClass();" и нужно ли где то..мм... "объявлять" эту... введенную переменную playerClass ? У вас, конечно, всегда есть право послать куда подальше, но я правда хочу научиться! "ЧИТАЙ МАНУАЛЫ", уже слышу, но вот на практике было бы много интереснее и полезнее) |
Можно и так как вы написали, я думаю.
Но на самом деле, переменная лишняя, тем более с таким огромным диапазоном. Делайте так: switch(player->getClass()) А int - это целочисленный беззнаковый тип данных в С++, что написано на первых страницах любого учебника по этому языку.
Arcanum Core © Dev.
Для запросов на выдачу наград/снятие замечаний есть темы в Работе Портала. Не пишите по этому поводу в личку.
Сообщение # 45 написано 25.08.2012 в 02:42
|
Спасибо)
Вот так всегда - сначала напишешь глупое сообщение с глупыми вопросами - а потом уйдешь гуглить... Про тот же целочисленный беззнаковый тип данных было очень верно подмечено) И что такое switch загуглил, и switch (player->getClass()) именно так написал) и пошел спать) спасибо) Теперь пытаюсь найти - есть ли тут чтото вроде "проверки на наличие выученного спелла / таланта", чтобы определять какой спек у класса, чтобы выдавать итем по классу... Code switch (player->getClass()) { case CLASS_PALADIN: switch (SpellFamilyName) { case SPELLFAMILY_PALADIN: switch (Id) { case 20473: // холипал case 53385: // ретрипал case 31935: // танкопал } } ...................................................................................... } так ведь не пойдет? switch (SpellFamilyName) это просто проверка кастующегося спелла? или вообще непойми чего... буду сидеть и дальше ковыряться((( ________________________________________________________________________________ хм >< я наркоман сделать для каждой нужной комбинации проверку класса и спека; и без switch (player->getClass()) Code if (player->HasSpell(******)) попробую... что получится - выложу сюда, может помежете поискать ошибки( ________________________________________________________________________________ Quote (std_Suicide) В данном случае у тебя компилятор будет кричать на Player, ибо это класс. Code if (player->HasSpell(******)) говорю же, я в этом ничерта не смыслю, но пытаюсь научится |
Продолжая тему дурацких вопросов..... Можно ли писать так вот? При невыполнении первого условия - еще одно.. вроде бы
Code + switch (killer->getClass()) + { + case CLASS_PALADIN: + if (killer->HasSpell(31935)) //пропал + { + killer->AddItem(FROSTMOURNE2_ID, 1); + break; + } + else + { + if (killer->HasSpell(53385)) //ретрипал + { + killer->AddItem(FROSTMOURNE3_ID, 1); + break; + } + else //холипал + { + killer->AddItem(FROSTMOURNE4_ID, 1); + break; + } + } .................................................. И на счет уничтожения итемов - будет ли правильно просто напросто перечислить вообще все виды фростморнов-рисовок, или тоже нужно писать мм... проверку классов/спеков? Code + plr->DestroyItemCount(123451, 1, true, true); + plr->DestroyItemCount(123422, 1, true, true); + plr->DestroyItemCount(123453, 1, true, true); + plr->DestroyItemCount(123454, 1, true, true); + plr->DestroyItemCount(123455, 1, true, true); + plr->DestroyItemCount(123456, 1, true, true); + plr->DestroyItemCount(123457, 1, true, true); ? задаю, конечно, вопросы, на которые должно отвечать "напиши скомпиль запусти проверь сам"; но блин, в теории, со всем можно разабраться и в теории кроме того, может кто над подобным уже думал и делал, так почему бы и не узнать? (вынь да подай, блин) ________________________ и еще. "plr" в коде Dimitro - это ведь просто где то прописанное сокращение от "player"? почему тогда в некоторых местах пишется "plr", а в некоторых - "player"? имеет ли это какое либо значение? |
Учите С++, на настолько глупые вопросы я не отвечаю.
Arcanum Core © Dev.
Для запросов на выдачу наград/снятие замечаний есть темы в Работе Портала. Не пишите по этому поводу в личку.
Сообщение # 49 написано 25.08.2012 в 17:31
|
Quote (Ma_aelKoT) почему тогда в некоторых местах пишется "plr", а в некоторых - "player"? имеет ли это какое либо значение? Потому что это переменная класса Player. Можно так Player* plr, Player* dwad; и так далее. Quote (Ma_aelKoT) switch (killer->getClass()) + { + case CLASS_PALADIN: + if (killer->HasSpell(31935)) //пропал + { + killer->AddItem(FROSTMOURNE2_ID, 1); + break; + } + else + { + if (killer->HasSpell(53385)) //ретрипал + { + killer->AddItem(FROSTMOURNE3_ID, 1); + break; + } + else //холипал + { + killer->AddItem(FROSTMOURNE4_ID, 1); + break; + } + } тут не хватает скобки, вместо else можно использовать else if. Это же начальные знания. И зачем в условия ставить break? Почитай, что он значит.
Сообщение # 51 написано 25.08.2012 в 17:52
|
На сей раз у меня вопрос чуть более серьездный( На который, может быть, даже не зазорно будет ответить(
Вот у Dimitro патч старенький, (судя по "Fri Aug 26 23:58:55 2011" - у него завтра годовщина ) по добавлению изменений в файл Battlegrounds.cpp у меня вопрос... Code if (plr->HasAuraType(SPELL_AURA_SPIRIT_OF_REDEMPTION)) plr->RemoveAurasByType(SPELL_AURA_MOD_SHAPESHIFT); + plr->DeMorph(); + plr->DestroyItemCount(49623, 1, true, true);//Замените 49623 на ID вашей рисовки + if (!plr->isAlive()) { plr->ResurrectPlayer(1.0f); Строка if (plr->HasAuraType(SPELL_AURA_SPIRIT_OF_REDEMPTION)) в Battleground.cpp встречается в коде дважды, но у нас стоит @@ -784,6 +784,9 @@ - что показывает какая именно это строка была год назад. А в теперяшних Battleground.cpp она есть под номерами ~825 и 963... На сколько я понял, строка 825 - одно из действий, которое выполняется при окончании БГ; а строка 963 - при ливе персонажа с БГ. Теоретически, и в том и во втором случае нужно добавлять Code + plr->DeMorph(); + plr->DestroyItemCount(49623, 1, true, true); Вот и не могу понять - нужно ли дописать эти действия и при окончании БГ и при ливе с БГ; либо достаточно только 1 раз, как в оригинальном коде (тогда где?..)? Спасите..... __________________________________________________________ еще из разряда дурацких вопросов.. Code diff -r 53648bd13f2f src/server/game/Battlegrounds/Battleground.cpp что в этой, и ей подобных записях, значат цифры, вроде "53648bd13f2f"?.. еще всетрчал как то, ну, к примеру Code diff -r 43bf3a55b4df -r f7ad640c54a5 src/server/game/Entities/Player/Player.cpp тут в двое больше этих странных непонятных цифро-символов |
В общем, в итоге, вышло нечто подобное:
Code --- Battleground.cpp Fri Sep 14 09:13:39 2012 +++ Battleground.cpp Fri Sep 14 09:30:28 2012 @@ -1006,6 +1006,47 @@ void Battleground::RemovePlayerAtLeave(u { if (player->HasAuraType(SPELL_AURA_SPIRIT_OF_REDEMPTION)) player->RemoveAurasByType(SPELL_AURA_MOD_SHAPESHIFT); + + player->DeMorph(); + switch (player->getClass()) + { + case CLASS_WARLOCK: + player->DestroyItemCount(47401, 1, true, true); + case CLASS_ROGUE: + player->DestroyItemCount(47361, 1, true, true); + case CLASS_MAGE: + player->DestroyItemCount(47401, 1, true, true); + case CLASS_HUNTER: + player->DestroyItemCount(33795, 1, true, true); + case CLASS_PRIEST: + player->DestroyItemCount(47401, 1, true, true); + case CLASS_PALADIN: + { + player->DestroyItemCount(42169, 1, true, true); + player->DestroyItemCount(49293, 1, true, true); + player->DestroyItemCount(53096, 1, true, true); + } + case CLASS_DEATH_KNIGHT: + { + player->DestroyItemCount(37001, 1, true, true); + player->DestroyItemCount(33475, 1, true, true); + } + case CLASS_SHAMAN: + { + player->DestroyItemCount(50513, 1, true, true); + player->DestroyItemCount(53096, 1, true, true); + } + case CLASS_DRUID: + { + player->DestroyItemCount(33795, 1, true, true); + player->DestroyItemCount(53096, 1, true, true); + } + case CLASS_WARRIOR: + { + player->DestroyItemCount(37001, 1, true, true); + player->DestroyItemCount(51322, 1, true, true); + } + } if (!player->isAlive()) // resurrect on exit { И воооооот это... Code --- BattlegroundWS.cpp Fri Sep 14 09:20:30 2012 +++ BattlegroundWS.cpp Fri Sep 14 10:08:19 2012 @@ -28,6 +28,20 @@ #include "World.h" #include "WorldPacket.h" +uint64 FROST_SPD_MACE = 53096; //хпал рдру мункдру ршам элемшам +uint64 FROST_SPD_DAGER = 47401;//маг прист лок +uint64 FROST_AP_MACE = 42169; //протопал крит+хаст +//uint64 FROST_AP_AXE = протовар +uint64 FROST_AP_MIGHT = 37001; //фростдк протвар +uint64 FROST_AP_FIST = 50513; //энхшам +uint64 FROST_AP_DAGER = 47361; //рог +uint64 FROST_2H_STUFF = 33795; //фералдру хант +uint64 FROST_2H_MIGHT = 33475; //дк +uint64 FROST_2H_MACE = 49293; //рпаладин крит+хаст +uint64 FROST_2H_AXE= 51322; //варриор +uint64 lichGUID; +bool lich_exists = false; + // these variables aren't used outside of this file, so declare them only here enum BG_WSG_Rewards { @@ -205,6 +219,67 @@ void BattlegroundWS::AddPlayer(Player* p BattlegroundWGScore* sc = new BattlegroundWGScore; PlayerScores[player->GetGUID()] = sc; + + if (!lich_exists) + { + player->SetDisplayId(24191); //Lich King + player->Whisper("The Lich King must always exist ...", LANG_UNIVERSAL,player->GetGUID()); + player->Whisper("You can find Frostmourne in your invertare ...", LANG_UNIVERSAL, player->GetGUID()); + switch (player->getClass()) + { + case CLASS_WARLOCK: + player->AddItem(FROST_SPD_DAGER, 1); + case CLASS_ROGUE: + player->AddItem(FROST_AP_DAGER, 1); + case CLASS_MAGE: + player->AddItem(FROST_SPD_DAGER, 1); + case CLASS_HUNTER: + player->AddItem(FROST_2H_STUFF, 1); + case CLASS_PRIEST: + player->AddItem(FROST_SPD_DAGER, 1); + case CLASS_PALADIN: + if (player->HasSpell(31935)) //протопал + { + player->AddItem(FROST_AP_MACE, 1); + } + else if (player->HasSpell(53385)) //ретрипал + { + player->AddItem(FROST_2H_MACE, 1); + } + else //холипал + player->AddItem(FROST_SPD_MACE, 1); + case CLASS_DEATH_KNIGHT: + if (player->HasSpell(65661)) //с одноручками + { + player->AddItem(FROST_AP_MIGHT, 1); + } + else + player->AddItem(FROST_2H_MIGHT, 1); + case CLASS_SHAMAN: + if (player->HasSpell(30798)) //энх шам + { + player->AddItem(FROST_AP_FIST, 1); + } + else + player->AddItem(FROST_SPD_MACE, 1); + case CLASS_DRUID: + if (player->HasSpell(33917)) //ферал друид + { + player->AddItem(FROST_2H_STUFF, 1); + } + else + player->AddItem(FROST_SPD_MACE, 1); + case CLASS_WARRIOR: + if (player->HasSpell(20243)) //протовар + { + player->AddItem(FROST_AP_MIGHT, 1); + } + else + player->AddItem(FROST_2H_AXE, 1); + } + lichGUID = player->GetGUID(); + lich_exists = true; + } } void BattlegroundWS::RespawnFlag(uint32 Team, bool captured) @@ -755,7 +830,107 @@ void BattlegroundWS::HandleKillPlayer(Pl { if (GetStatus() != STATUS_IN_PROGRESS) return; - + + if (player->GetGUID() == lichGUID) + { + player->DeMorph(); + switch (player->getClass()) + { + case CLASS_WARLOCK: + player->DestroyItemCount(47401, 1, true, true); + case CLASS_ROGUE: + player->DestroyItemCount(47361, 1, true, true); + case CLASS_MAGE: + player->DestroyItemCount(47401, 1, true, true); + case CLASS_HUNTER: + player->DestroyItemCount(33795, 1, true, true); + case CLASS_PRIEST: + player->DestroyItemCount(47401, 1, true, true); + case CLASS_PALADIN: + { + player->DestroyItemCount(42169, 1, true, true); + player->DestroyItemCount(49293, 1, true, true); + player->DestroyItemCount(53096, 1, true, true); + } + case CLASS_DEATH_KNIGHT: + { + player->DestroyItemCount(37001, 1, true, true); + player->DestroyItemCount(33475, 1, true, true); + } + case CLASS_SHAMAN: + { + player->DestroyItemCount(50513, 1, true, true); + player->DestroyItemCount(53096, 1, true, true); + } + case CLASS_DRUID: + { + player->DestroyItemCount(33795, 1, true, true); + player->DestroyItemCount(53096, 1, true, true); + } + case CLASS_WARRIOR: + { + player->DestroyItemCount(37001, 1, true, true); + player->DestroyItemCount(51322, 1, true, true); + } + } + player->Whisper("The Lich King must always exist ...", LANG_UNIVERSAL, killer->GetGUID()); + player->Whisper("You can find Frostmourne in your invertare ...", LANG_UNIVERSAL, killer->GetGUID()); + killer->SetDisplayId(24191); //Lich King + switch (killer->getClass()) + { + case CLASS_WARLOCK: + killer->AddItem(FROST_SPD_DAGER, 1); + case CLASS_ROGUE: + killer->AddItem(FROST_AP_DAGER, 1); + case CLASS_MAGE: + killer->AddItem(FROST_SPD_DAGER, 1); + case CLASS_HUNTER: + killer->AddItem(FROST_2H_STUFF, 1); + case CLASS_PRIEST: + killer->AddItem(FROST_SPD_DAGER, 1); + case CLASS_PALADIN: + if (killer->HasSpell(31935)) //протопал + { + killer->AddItem(FROST_AP_MACE, 1); + } + else if (killer->HasSpell(53385)) //ретрипал + { + killer->AddItem(FROST_2H_MACE, 1); + } + else //холипал + killer->AddItem(FROST_SPD_MACE, 1); + case CLASS_DEATH_KNIGHT: + if (killer->HasSpell(65661)) //с одноручками + { + killer->AddItem(FROST_AP_MIGHT, 1); + } + else + killer->AddItem(FROST_2H_MIGHT, 1); + case CLASS_SHAMAN: + if (killer->HasSpell(30798)) //энх шам + { + killer->AddItem(FROST_AP_FIST, 1); + } + else + killer->AddItem(FROST_SPD_MACE, 1); + case CLASS_DRUID: + if (killer->HasSpell(33917)) //ферал друид + { + killer->AddItem(FROST_2H_STUFF, 1); + } + else + killer->AddItem(FROST_SPD_MACE, 1); + case CLASS_WARRIOR: + if (killer->HasSpell(20243)) //протовар + { + killer->AddItem(FROST_AP_MIGHT, 1); + } + else + killer->AddItem(FROST_2H_AXE, 1); + } + lichGUID = killer->GetGUID(); + } + EventPlayerDroppedFlag(player); Battleground::HandleKillPlayer(player, killer); Маленькая загвоздочка только.... Неработает нихрена))) Что делать..? Ищу, в где могут быть ошибки; ну, кроме гуглоперевода... |
Silvanalol,
Код diff -r 53648bd13f2f src/server/game/Battlegrounds/Battleground.cpp --- a/src/server/game/Battlegrounds/Battleground.cpp Wed Aug 24 12:21:26 2011 +0300 +++ b/src/server/game/Battlegrounds/Battleground.cpp Fri Aug 26 23:58:55 2011 +0300 @@ -784,6 +784,9 @@ if (plr->HasAuraType(SPELL_AURA_SPIRIT_OF_REDEMPTION)) plr->RemoveAurasByType(SPELL_AURA_MOD_SHAPESHIFT); + plr->DeMorph(); + if (!plr->isAlive()) { plr->ResurrectPlayer(1.0f); diff -r 53648bd13f2f src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp --- a/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp Wed Aug 24 12:21:26 2011 +0300 +++ b/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp Fri Aug 26 23:58:55 2011 +0300 @@ -28,6 +28,10 @@ #include "World.h" #include "WorldPacket.h" +uint64 lichGUID; +bool lich_exists = false; + // these variables aren't used outside of this file, so declare them only here enum BG_WSG_Rewards { @@ -209,6 +214,16 @@ BattlegroundWGScore* sc = new BattlegroundWGScore; m_PlayerScores[plr->GetGUID()] = sc; + + if (!lich_exists) + { + plr->SetDisplayId(24191);//Lich King + plr->Whisper("Король-Лич должен существовать всегда...", LANG_UNIVERSAL, plr->GetGUID()); + lichGUID = plr->GetGUID(); + lich_exists = true; + } } void BattlegroundWS::RespawnFlag(uint32 Team, bool captured) @@ -748,6 +763,17 @@ { if (GetStatus() != STATUS_IN_PROGRESS) return; + + if (player->GetGUID() == lichGUID) + { + player->DeMorph(); + player->Whisper("Король-Лич должен существовать всегда...", LANG_UNIVERSAL, killer->GetGUID()); + killer->SetDisplayId(24191);//Lich King + lichGUID = killer->GetGUID(); + } EventPlayerDroppedFlag(player);
Помогаю в силу своих возможностей, если что-то не понимаю, то извините.
Сообщение # 57 написано 27.02.2015 в 00:31
|
| |||