PDA

Просмотр полной версии : на Мангос друиды в кошке и медведе могут в парикмахерской облик менять?


tempura
02.01.2010, 18:19
Давно не проверял, может кто знает...

На Мангос друиды в кошке и медведе могут в парикмахерской облик менять?

Если не могут, то почему? :) :) :)



На оффе вроде уже сделано.
wow-europe.com/ru/info/underdev/druidforms.html
wow-europe.com/shared/wow-com/images/underdev/druidforms/ru/ss4.jpg

timmit
02.01.2010, 18:20
На Гетмангосе ведется обсуждение патча :)
http://getmangos.com/community/showthread.php?11328-Druid-Shape-Visuals

StinK
02.01.2010, 18:29
9086 - "В этом облике действие недоступно"

tempura
02.01.2010, 18:31
getmangos.com/community/showthread.php?10412-Druid-Forms-cosmetics
Пишут, что патч из топа нормально работает на 9026, хотя там файлы при заливке, но их руками несложно должно быть исправить. Хотя меня беспокоит сильное изменение где-то там в недавних ревизиях, где куча переменных (или функций? я в этом тупой) поменялась.

thenecromancer - автор поста с патчем
What does this do:
It switches display ID depending on player's racial features.
I cannot guarantee correctness of these IDs ( some are very similar ), but it is easy to correct them
diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp
index bd852d8..8fa949f 100644
--- a/src/game/SpellAuras.cpp
+++ b/src/game/SpellAuras.cpp
@@ -2783,85 +2783,36 @@ void Aura::HandleAuraModShapeshift(bool apply, bool Real)
switch(form)
{
case FORM_CAT:
- if(Player::TeamForRace(m_target->getRace()) == ALLIANCE)
- modelid = 892;
- else
- modelid = 8571;
PowerType = POWER_ENERGY;
break;
- case FORM_TRAVEL:
- modelid = 632;
- break;
- case FORM_AQUA:
- if(Player::TeamForRace(m_target->getRace()) == ALLIANCE)
- modelid = 2428;
- else
- modelid = 2428;
- break;
case FORM_BEAR:
- if(Player::TeamForRace(m_target->getRace()) == ALLIANCE)
- modelid = 2281;
- else
- modelid = 2289;
- PowerType = POWER_RAGE;
- break;
- case FORM_GHOUL:
- if(Player::TeamForRace(m_target->getRace()) == ALLIANCE)
- modelid = 10045;
- break;
case FORM_DIREBEAR:
- if(Player::TeamForRace(m_target->getRace()) == ALLIANCE)
- modelid = 2281;
- else
- modelid = 2289;
+ case FORM_BATTLESTANCE:
+ case FORM_BERSERKERSTANCE:
+ case FORM_DEFENSIVESTANCE:
PowerType = POWER_RAGE;
break;
+ case FORM_TRAVEL:
+ case FORM_AQUA:
+ case FORM_GHOUL:
case FORM_CREATUREBEAR:
- modelid = 902;
- break;
case FORM_GHOSTWOLF:
- modelid = 4613;
- break;
case FORM_FLIGHT:
- if(Player::TeamForRace(m_target->getRace()) == ALLIANCE)
- modelid = 20857;
- else
- modelid = 20872;
- break;
case FORM_MOONKIN:
- if(Player::TeamForRace(m_target->getRace()) == ALLIANCE)
- modelid = 15374;
- else
- modelid = 15375;
- break;
case FORM_FLIGHT_EPIC:
- if(Player::TeamForRace(m_target->getRace()) == ALLIANCE)
- modelid = 21243;
- else
- modelid = 21244;
- break;
case FORM_METAMORPHOSIS:
- modelid = 25277;
- break;
case FORM_AMBIENT:
case FORM_SHADOW:
case FORM_STEALTH:
- break;
case FORM_TREE:
- modelid = 864;
- break;
- case FORM_BATTLESTANCE:
- case FORM_BERSERKERSTANCE:
- case FORM_DEFENSIVESTANCE:
- PowerType = POWER_RAGE;
- break;
case FORM_SPIRITOFREDEMPTION:
- modelid = 16031;
break;
default:
sLog.outError("Auras: Unknown Shapeshift Type: %u, SpellId %u.", m_modifier.m_miscvalue, GetId());
}

+ modelid = m_target->GetModelForForm(form);
+
// remove polymorph before changing display id to keep new display id
switch ( form )
{
diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp
index ea2837a..ea4b31e 100644
--- a/src/game/Unit.cpp
+++ b/src/game/Unit.cpp
@@ -12424,3 +12424,203 @@ void Unit::KnockBackFrom(Unit* target, float horizintalSpeed, float verticalSpee
NearTeleportTo(fx, fy, fz, GetOrientation(), this == target);
}
}
+
+uint32 Unit::GetModelForForm(ShapeshiftForm form)
+{
+ switch(form)
+ {
+ case FORM_CAT:
+ // Based on Hair color
+ if (getRace() == RACE_NIGHTELF)
+ {
+ uint8 hairColor = GetByteValue(PLAYER_BYTES, 3);
+ switch (hairColor)
+ {
+ case 7: // Violet
+ case 8:
+ return 29405;
+ case 3: // Light Blue
+ return 29406;
+ case 0: // Green
+ case 1: // Light Green
+ case 2: // Dark Green
+ return 29407;
+ case 4: // White
+ return 29408;
+ default: // original - Dark Blue
+ return 892;
+ }
+ }
+ // Based on Skin color
+ else if (getRace() == RACE_TAUREN)
+ {
+ uint8 skinColor = GetByteValue(PLAYER_BYTES, 0);
+ // Male
+ if (getGender() == GENDER_MALE)
+ {
+ switch(skinColor)
+ {
+ case 12: // White
+ case 13:
+ case 14:
+ case 18: // Completly White
+ return 29409;
+ case 9: // Light Brown
+ case 10:
+ case 11:
+ return 29410;
+ case 6: // Brown
+ case 7:
+ case 8:
+ return 29411;
+ case 0: // Dark
+ case 1:
+ case 2:
+ case 3: // Dark Grey
+ case 4:
+ case 5:
+ return 29412;
+ default: // original - Grey
+ return 8571;
+ }
+ }
+ // Female
+ else switch (skinColor)
+ {
+ case 10: // White
+ return 29409;
+ case 6: // Light Brown
+ case 7:
+ return 29410;
+ case 4: // Brown
+ case 5:
+ return 29411;
+ case 0: // Dark
+ case 1:
+ case 2:
+ case 3:
+ return 29412;
+ default: // original - Grey
+ return 8571;
+ }
+ }
+ else if(Player::TeamForRace(getRace())==ALLIANCE)
+ return 892;
+ else
+ return 8571;
+ case FORM_DIREBEAR:
+ case FORM_BEAR:
+ // Based on Hair color
+ if (getRace() == RACE_NIGHTELF)
+ {
+ uint8 hairColor = GetByteValue(PLAYER_BYTES, 3);
+ switch (hairColor)
+ {
+ case 0: // Green
+ case 1: // Light Green
+ case 2: // Dark Green
+ return 29413; // 29415?
+ case 6: // Dark Blue
+ return 29414;
+ case 4: // White
+ return 29416;
+ case 3: // Light Blue
+ return 29417;
+ default: // original - Violet
+ return 2281;
+ }
+ }
+ // Based on Skin color
+ else if (getRace() == RACE_TAUREN)
+ {
+ uint8 skinColor = GetByteValue(PLAYER_BYTES, 0);
+ // Male
+ if (getGender() == GENDER_MALE)
+ {
+ switch (skinColor)
+ {
+ case 0: // Dark (Black)
+ case 1:
+ case 2:
+ return 29418;
+ case 3: // White
+ case 4:
+ case 5:
+ case 12:
+ case 13:
+ case 14:
+ return 29419;
+ case 9: // Light Brown/Grey
+ case 10:
+ case 11:
+ case 15:
+ case 16:
+ case 17:
+ return 29420;
+ case 18: // Completly White
+ return 29421;
+ default: // original - Brown
+ return 2289;
+ }
+ }
+ // Female
+ else switch (skinColor)
+ {
+ case 0: // Dark (Black)
+ case 1:
+ return 29418;
+ case 2: // White
+ case 3:
+ return 29419;
+ case 6: // Light Brown/Grey
+ case 7:
+ case 8:
+ case 9:
+ return 29420;
+ case 10: // Completly White
+ return 29421;
+ default: // original - Brown
+ return 2289;
+ }
+ }
+ else if(Player::TeamForRace(getRace())==ALLIANCE)
+ return 2281;
+ else
+ return 2289;
+ case FORM_TRAVEL:
+ return 632;
+ case FORM_AQUA:
+ if(Player::TeamForRace(getRace())==ALLIANCE)
+ return 2428;
+ else
+ return 2428;
+ case FORM_GHOUL:
+ return 24994;
+ case FORM_CREATUREBEAR:
+ return 902;
+ case FORM_GHOSTWOLF:
+ return 4613;
+ case FORM_FLIGHT:
+ if(Player::TeamForRace(getRace())==ALLIANCE)
+ return 20857;
+ else
+ return 20872;
+ case FORM_MOONKIN:
+ if(Player::TeamForRace(getRace())==ALLIANCE)
+ return 15374;
+ else
+ return 15375;
+ case FORM_FLIGHT_EPIC:
+ if(Player::TeamForRace(getRace())==ALLIANCE)
+ return 21243;
+ else
+ return 21244;
+ case FORM_METAMORPHOSIS:
+ return 25277;
+ case FORM_TREE:
+ return 864;
+ case FORM_SPIRITOFREDEMPTION:
+ return 16031;
+ }
+ return 0;
+}
\ No newline at end of file
diff --git a/src/game/Unit.h b/src/game/Unit.h
index 43b305d..8e89227 100644
--- a/src/game/Unit.h
+++ b/src/game/Unit.h
@@ -1519,6 +1519,7 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
void AddPetAura(PetAura const* petSpell);
void RemovePetAura(PetAura const* petSpell);

+ uint32 GetModelForForm(ShapeshiftForm form);
protected:
explicit Unit ();

надо бы собраться и попробовать. у меня сейчас 9088 - посмотреть хоть...



оооопппсссс.........



Я попробовал этот патч в 9088 сунуть, и обломился. Моих способностей тупо не хватает.

Сейчас в SpellAuras.cpp штука switch(form) выглядит совершенно не так, как в патче. Кто-то менее тупой, чем я, может объяснить (лучше показать) что и как там делать?

Mr.Grom
03.01.2010, 02:16
Поставил его еще на коммите 8754_Druid_form_color.patch и забыл про него все работает нормально и цвета меняются.

tempura
03.01.2010, 13:21
ну так и чего не выложил-то?

griffonheart
09.01.2010, 13:39
Можно попробовать вот такой патч:
diff --git a/src/game/SpellAuras.cpp b/src/game/SpellAuras.cpp
index 97f4bd6..dfc993b 100644
--- a/src/game/SpellAuras.cpp
+++ b/src/game/SpellAuras.cpp
@@ -2900,7 +2900,9 @@ void Aura::HandleAuraModShapeshift(bool apply, bool Real)
return;
}

- if (ssEntry->modelID_A)
+ modelid = m_target->GetModelForForm(form);
+
+ if (!modelid && ssEntry->modelID_A)
{
// i will asume that creatures will always take the defined model from the dbc
// since no field in creature_templates describes wether an alliance or
diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp
index f60f1f3..34e721a 100644
--- a/src/game/Unit.cpp
+++ b/src/game/Unit.cpp
@@ -13132,6 +13132,206 @@ void Unit::StopAttackFaction(uint32 faction_id)
guardian->StopAttackFaction(faction_id);
}

+uint32 Unit::GetModelForForm(ShapeshiftForm form)
+{
+ switch(form)
+ {
+ case FORM_CAT:
+ // Based on Hair color
+ if (getRace() == RACE_NIGHTELF)
+ {
+ uint8 hairColor = GetByteValue(PLAYER_BYTES, 3);
+ switch (hairColor)
+ {
+ case 7: // Violet
+ case 8:
+ return 29405;
+ case 3: // Light Blue
+ return 29406;
+ case 0: // Green
+ case 1: // Light Green
+ case 2: // Dark Green
+ return 29407;
+ case 4: // White
+ return 29408;
+ default: // original - Dark Blue
+ return 892;
+ }
+ }
+ // Based on Skin color
+ else if (getRace() == RACE_TAUREN)
+ {
+ uint8 skinColor = GetByteValue(PLAYER_BYTES, 0);
+ // Male
+ if (getGender() == GENDER_MALE)
+ {
+ switch(skinColor)
+ {
+ case 12: // White
+ case 13:
+ case 14:
+ case 18: // Completly White
+ return 29409;
+ case 9: // Light Brown
+ case 10:
+ case 11:
+ return 29410;
+ case 6: // Brown
+ case 7:
+ case 8:
+ return 29411;
+ case 0: // Dark
+ case 1:
+ case 2:
+ case 3: // Dark Grey
+ case 4:
+ case 5:
+ return 29412;
+ default: // original - Grey
+ return 8571;
+ }
+ }
+ // Female
+ else switch (skinColor)
+ {
+ case 10: // White
+ return 29409;
+ case 6: // Light Brown
+ case 7:
+ return 29410;
+ case 4: // Brown
+ case 5:
+ return 29411;
+ case 0: // Dark
+ case 1:
+ case 2:
+ case 3:
+ return 29412;
+ default: // original - Grey
+ return 8571;
+ }
+ }
+ else if(Player::TeamForRace(getRace())==ALLIANCE)
+ return 892;
+ else
+ return 8571;
+ case FORM_DIREBEAR:
+ case FORM_BEAR:
+ // Based on Hair color
+ if (getRace() == RACE_NIGHTELF)
+ {
+ uint8 hairColor = GetByteValue(PLAYER_BYTES, 3);
+ switch (hairColor)
+ {
+ case 0: // Green
+ case 1: // Light Green
+ case 2: // Dark Green
+ return 29413; // 29415?
+ case 6: // Dark Blue
+ return 29414;
+ case 4: // White
+ return 29416;
+ case 3: // Light Blue
+ return 29417;
+ default: // original - Violet
+ return 2281;
+ }
+ }
+ // Based on Skin color
+ else if (getRace() == RACE_TAUREN)
+ {
+ uint8 skinColor = GetByteValue(PLAYER_BYTES, 0);
+ // Male
+ if (getGender() == GENDER_MALE)
+ {
+ switch (skinColor)
+ {
+ case 0: // Dark (Black)
+ case 1:
+ case 2:
+ return 29418;
+ case 3: // White
+ case 4:
+ case 5:
+ case 12:
+ case 13:
+ case 14:
+ return 29419;
+ case 9: // Light Brown/Grey
+ case 10:
+ case 11:
+ case 15:
+ case 16:
+ case 17:
+ return 29420;
+ case 18: // Completly White
+ return 29421;
+ default: // original - Brown
+ return 2289;
+ }
+ }
+ // Female
+ else switch (skinColor)
+ {
+ case 0: // Dark (Black)
+ case 1:
+ return 29418;
+ case 2: // White
+ case 3:
+ return 29419;
+ case 6: // Light Brown/Grey
+ case 7:
+ case 8:
+ case 9:
+ return 29420;
+ case 10: // Completly White
+ return 29421;
+ default: // original - Brown
+ return 2289;
+ }
+ }
+ else if(Player::TeamForRace(getRace())==ALLIANCE)
+ return 2281;
+ else
+ return 2289;
+ case FORM_TRAVEL:
+ return 632;
+ case FORM_AQUA:
+ if(Player::TeamForRace(getRace())==ALLIANCE)
+ return 2428;
+ else
+ return 2428;
+ case FORM_GHOUL:
+ return 24994;
+ case FORM_CREATUREBEAR:
+ return 902;
+ case FORM_GHOSTWOLF:
+ return 4613;
+ case FORM_FLIGHT:
+ if(Player::TeamForRace(getRace())==ALLIANCE)
+ return 20857;
+ else
+ return 20872;
+ case FORM_MOONKIN:
+ if(Player::TeamForRace(getRace())==ALLIANCE)
+ return 15374;
+ else
+ return 15375;
+ case FORM_FLIGHT_EPIC:
+ if(Player::TeamForRace(getRace())==ALLIANCE)
+ return 21243;
+ else
+ return 21244;
+ case FORM_METAMORPHOSIS:
+ return 25277;
+ case FORM_TREE:
+ return 864;
+ case FORM_SPIRITOFREDEMPTION:
+ return 16031;
+ }
+ return 0;
+}
+
void Unit::CleanupDeletedAuras()
{
// really delete auras "deleted" while processing its ApplyModify code
diff --git a/src/game/Unit.h b/src/game/Unit.h
index 3040704..16f7809 100644
--- a/src/game/Unit.h
+++ b/src/game/Unit.h
@@ -1572,6 +1572,7 @@ class MANGOS_DLL_SPEC Unit : public WorldObject
PetAuraSet m_petAuras;
void AddPetAura(PetAura const* petSpell);
void RemovePetAura(PetAura const* petSpell);
+ uint32 GetModelForForm(ShapeshiftForm form);

protected:
explicit Unit ();

tempura
18.01.2010, 16:21
встало без ошибок, сейчас компилить пойду.


компил тоже без ошибок.