Nouvelle Classe : Spiritualiste [Abandonné]
Bonsoir, je vous présente le travail que j'ai fait pour la création d'une nouvelle classe :

Fait sous version 3.3.5 il y a un moment (requêtes pas à jour ?).

Voilà quelques screens et infos sur ce que j'avais fait.


Ecran de création de personnage modifié :
[Image: new_class_01.png]


Séléction des personnages :
[Image: new_class_02.png]


En jeu :
[Image: new_class_03.png]



Les différentes spé du Spiritualiste :
[Image: new_class_spellbook_01.png]

[Image: new_class_spellbook_02.png]

[Image: new_class_spellbook_03.png]


Et les arbres de talents, prêts à être remplis :
[Image: new_class_talents.png]





La map de départ, petite ville enneigée :

[Image: new_class_new_zone.01.png]

[Image: new_class_new_zone.02.png]

[Image: new_class_new_zone.04.png]

[Image: new_class_new_zone.05.png]

[Image: new_class_new_zone.06.png]

[Image: new_class_new_zone.07.png]

[Image: new_class_new_zone.08.png]

[Image: new_class_new_zone.09.png]

[Image: new_class_new_zone.10.png]


Une vue de dessus avec juste le terrain et les bâtiments :
http://www.model-changing.com/images/pro...map1.0.png


Voici le patch, contenant toute la partie client (modifs interface, map, sorts, etc...) :
patch-NewClassSpirit.MPQ

Plusieurs sorts dispos, de l'id 85000 à 85062.
Quelques trucs en vrac :
[code=diff]diff --git a/src/game/CharacterHandler.cpp b/src/game/CharacterHandler.cpp
index ae7e3f1..722cc3c 100644
--- a/src/game/CharacterHandler.cpp
+++ b/src/game/CharacterHandler.cpp
@@ -319,7 +319,7 @@ void WorldSession::HandleCharCreateOpcode( WorldPacket & recv_data )

// speedup check for heroic class disabled case
uint32 heroic_free_slots = sWorld.getConfig(CONFIG_UINT32_HEROIC_CHARACTERS_PER_REALM);​
- if(heroic_free_slots == 0 && GetSecurity() == SEC_PLAYER && class_ == CLASS_DEATH_KNIGHT)
+ if(heroic_free_slots == 0 && GetSecurity() == SEC_PLAYER && (class_ == CLASS_DEATH_KNIGHT || class_ == CLASS_SPIRIT))
{
data << (uint8)CHAR_CREATE_UNIQUE_CLASS_LIMIT;
SendPacket( &data );
@@ -328,7 +328,7 @@ void WorldSession::HandleCharCreateOpcode( WorldPacket & recv_data )

// speedup check for heroic class disabled case
uint32 req_level_for_heroic = sWorld.getConfig(CONFIG_UINT32_MIN_LEVEL_FOR_HEROIC_CHARACTE​R_CREATING);
- if(GetSecurity() == SEC_PLAYER && class_ == CLASS_DEATH_KNIGHT && req_level_for_heroic > sWorld.getConfig(CONFIG_UINT32_MAX_PLAYER_LEVEL))
+ if(GetSecurity() == SEC_PLAYER && (class_ == CLASS_DEATH_KNIGHT || class_ == CLASS_SPIRIT) && req_level_for_heroic > sWorld.getConfig(CONFIG_UINT32_MAX_PLAYER_LEVEL))
{
data << (uint8)CHAR_CREATE_LEVEL_REQUIREMENT;
SendPacket( &data );
@@ -343,10 +343,10 @@ void WorldSession::HandleCharCreateOpcode( WorldPacket & recv_data )
// if 0 then allowed creating without any characters
bool have_req_level_for_heroic = (req_level_for_heroic==0);

- if(!AllowTwoSideAccounts || skipCinematics == CINEMATICS_SKIP_SAME_RACE || class_ == CLASS_DEATH_KNIGHT)
+ if(!AllowTwoSideAccounts || skipCinematics == CINEMATICS_SKIP_SAME_RACE || class_ == CLASS_DEATH_KNIGHT || class_ == CLASS_SPIRIT)
{
QueryResult *result2 = CharacterDatabase.PQuery("SELECT level,race,class FROM characters WHERE account = '%u' %s",
- GetAccountId(), (skipCinematics == CINEMATICS_SKIP_SAME_RACE || class_ == CLASS_DEATH_KNIGHT) ? "" : "LIMIT 1");
+ GetAccountId(), (skipCinematics == CINEMATICS_SKIP_SAME_RACE || class_ == CLASS_DEATH_KNIGHT || class_ == CLASS_SPIRIT) ? "" : "LIMIT 1");
if(result2)
{
uint32 team_= Player::TeamForRace(race_);
@@ -354,10 +354,10 @@ void WorldSession::HandleCharCreateOpcode( WorldPacket & recv_data )
Field* field = result2->Fetch();
uint8 acc_race = field[1].GetUInt32();

- if(GetSecurity() == SEC_PLAYER && class_ == CLASS_DEATH_KNIGHT)
+ if(GetSecurity() == SEC_PLAYER && (class_ == CLASS_DEATH_KNIGHT || class_ == CLASS_SPIRIT))
{
uint8 acc_class = field[2].GetUInt32();
- if(acc_class == CLASS_DEATH_KNIGHT)
+ if(acc_class == CLASS_DEATH_KNIGHT || acc_class == CLASS_SPIRIT)
{
if(heroic_free_slots > 0)
--heroic_free_slots;
@@ -398,7 +398,7 @@ void WorldSession::HandleCharCreateOpcode( WorldPacket & recv_data )

// search same race for cinematic or same class if need
// TODO: check if cinematic already shown? (already logged in?; cinematic field)
- while ((skipCinematics == CINEMATICS_SKIP_SAME_RACE && !have_same_race) || class_ == CLASS_DEATH_KNIGHT)
+ while ((skipCinematics == CINEMATICS_SKIP_SAME_RACE && !have_same_race) || class_ == CLASS_DEATH_KNIGHT || class_ == CLASS_SPIRIT)
{
if(!result2->NextRow())
break;
@@ -409,10 +409,10 @@ void WorldSession::HandleCharCreateOpcode( WorldPacket & recv_data )
if(!have_same_race)
have_same_race = race_ == acc_race;

- if(GetSecurity() == SEC_PLAYER && class_ == CLASS_DEATH_KNIGHT)
+ if(GetSecurity() == SEC_PLAYER && (class_ == CLASS_DEATH_KNIGHT || class_ == CLASS_SPIRIT))
{
uint8 acc_class = field[2].GetUInt32();
- if(acc_class == CLASS_DEATH_KNIGHT)
+ if(acc_class == CLASS_DEATH_KNIGHT || acc_class == CLASS_SPIRIT)
{
if(heroic_free_slots > 0)
--heroic_free_slots;
@@ -438,7 +438,7 @@ void WorldSession::HandleCharCreateOpcode( WorldPacket & recv_data )
}
}

- if(GetSecurity() == SEC_PLAYER && class_ == CLASS_DEATH_KNIGHT && !have_req_level_for_heroic)
+ if(GetSecurity() == SEC_PLAYER && (class_ == CLASS_DEATH_KNIGHT || class_ == CLASS_SPIRIT) && !have_req_level_for_heroic)
{
data << (uint8)CHAR_CREATE_LEVEL_REQUIREMENT;
SendPacket( &data );
diff --git a/src/game/Level3.cpp b/src/game/Level3.cpp
index 927348e..cf7d562 100644
--- a/src/game/Level3.cpp
+++ b/src/game/Level3.cpp
@@ -4468,7 +4468,7 @@ bool ChatHandler::HandleResetLevelCommand(const char * args)
return false;

// set starting level
- uint32 start_level = target->getClass() != CLASS_DEATH_KNIGHT
+ uint32 start_level = (target->getClass() != CLASS_DEATH_KNIGHT && target->getClass() != CLASS_SPIRIT)
? sWorld.getConfig(CONFIG_UINT32_START_PLAYER_LEVEL)
: sWorld.getConfig(CONFIG_UINT32_START_HEROIC_PLAYER_LEVEL);

diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp
index 50394de..f07d8be 100644
--- a/src/game/ObjectMgr.cpp
+++ b/src/game/ObjectMgr.cpp
@@ -3006,6 +3006,13 @@ void ObjectMgr::BuildPlayerLevelInfo(uint8 race, uint8 _class, uint8 level, Play
info->stats[STAT_INTELLECT] += (lvl > 33 ? 2: (lvl > 2 ? 1: 0));
info->stats[STAT_SPIRIT] += (lvl > 38 ? 2: (lvl > 3 ? 1: 0));
break;
+ case CLASS_SPIRIT:
+ info->stats[STAT_STRENGTH] += (lvl > 9 && !(lvl%2) ? 1: 0);
+ info->stats[STAT_STAMINA] += (lvl > 5 ? 1: 0);
+ info->stats[STAT_AGILITY] += (lvl > 9 && !(lvl%2) ? 1: 0);
+ info->stats[STAT_INTELLECT] += (lvl > 24 ? 2: (lvl > 1 ? 1: 0));
+ info->stats[STAT_SPIRIT] += (lvl > 33 ? 2: (lvl > 2 ? 1: 0));
+ break;
case CLASS_DRUID:
info->stats[STAT_STRENGTH] += (lvl > 38 ? 2: (lvl > 6 && (lvl%2) ? 1: 0));
info->stats[STAT_STAMINA] += (lvl > 32 ? 2: (lvl > 4 ? 1: 0));
diff --git a/src/game/Player.cpp b/src/game/Player.cpp
index dfa19ac..cf624b2 100644
--- a/src/game/Player.cpp
+++ b/src/game/Player.cpp
@@ -619,7 +619,7 @@ bool Player::Create( uint32 guidlow, const std::string& name, uint8 race, uint8
SetUInt32Value( PLAYER_FIELD_YESTERDAY_CONTRIBUTION, 0 );

// set starting level
- uint32 start_level = getClass() != CLASS_DEATH_KNIGHT
+ uint32 start_level = (getClass() != CLASS_DEATH_KNIGHT && getClass() != CLASS_SPIRIT)
? sWorld.getConfig(CONFIG_UINT32_START_PLAYER_LEVEL)
: sWorld.getConfig(CONFIG_UINT32_START_HEROIC_PLAYER_LEVEL);

@@ -1517,7 +1517,7 @@ bool Player::BuildEnumData( QueryResult * result, WorldPacket * p_data )
uint32 petFamily = 0;

// show pet at selection character in character list only for non-ghost character
- if (result && !(playerFlags & PLAYER_FLAGS_GHOST) && (pClass == CLASS_WARLOCK || pClass == CLASS_HUNTER || pClass == CLASS_DEATH_KNIGHT))
+ if (result && !(playerFlags & PLAYER_FLAGS_GHOST) && (pClass == CLASS_WARLOCK || pClass == CLASS_HUNTER || pClass == CLASS_DEATH_KNIGHT || pClass == CLASS_SPIRIT))
{
uint32 entry = fields[16].GetUInt32();
CreatureInfo const* cInfo = sCreatureStorage.LookupEntry<CreatureInfo>(entry);
@@ -4984,7 +4984,7 @@ float Player::GetDodgeFromAgility()
0.0167f, // Shaman
0.034575f, // Mage
0.02011f, // Warlock
- 0.0f, // ??
+ 0.034575f, // Spiritualist
-0.0187f // Druid
};
// Crit/agility to dodge/agility coefficient multipliers
@@ -4998,7 +4998,7 @@ float Player::GetDodgeFromAgility()
1.0f, // Shaman
1.0f, // Mage
1.0f, // Warlock
- 0.0f, // ??
+ 1.0f, // Spiritualist
1.7f // Druid
};

@@ -20909,7 +20909,7 @@ uint32 Player::CalculateTalentsPoints() const
{
uint32 base_talent = getLevel() < 10 ? 0 : getLevel()-9;

- if(getClass() != CLASS_DEATH_KNIGHT)
+ if(getClass() != CLASS_DEATH_KNIGHT && getClass() != CLASS_SPIRIT)
return uint32(base_talent * sWorld.getConfig(CONFIG_FLOAT_RATE_TALENT));

uint32 talentPointsForLevel = getLevel() < 56 ? 0 : getLevel() - 55;
@@ -21013,6 +21013,29 @@ void Player::_LoadSkills(QueryResult *result)
}

// special settings
+ if(getClass()==CLASS_SPIRIT)
+ {
+ uint32 base_level = std::min(getLevel(),sWorld.getConfig (CONFIG_UINT32_START_HEROIC_PLAYER_LEVEL));
+ if(base_level < 1)
+ base_level = 1;
+ uint32 base_skill = (base_level-1)*5;
+ if(base_skill < 1)
+ base_skill = 1;
+
+ if(GetPureSkillValue (SKILL_FIRST_AID) < base_skill)
+ SetSkill(SKILL_FIRST_AID, base_skill, base_skill);
+ if(GetPureSkillValue (SKILL_DEFENSE) < base_skill)
+ SetSkill(SKILL_DEFENSE, base_skill, base_skill);
+ if(GetPureSkillValue (SKILL_WANDS) < base_skill)
+ SetSkill(SKILL_WANDS, base_skill, base_skill);
+ if(GetPureSkillValue (SKILL_DAGGERS) < base_skill)
+ SetSkill(SKILL_DAGGERS, base_skill, base_skill);
+ if(GetPureSkillValue (SKILL_2H_MACES) < base_skill)
+ SetSkill(SKILL_2H_MACES, base_skill, base_skill);
+ if(GetPureSkillValue (SKILL_UNARMED) < base_skill)
+ SetSkill(SKILL_UNARMED, base_skill, base_skill);
+ }
+
if(getClass()==CLASS_DEATH_KNIGHT)
{
uint32 base_level = std::min(getLevel(),sWorld.getConfig (CONFIG_UINT32_START_HEROIC_PLAYER_LEVEL));
diff --git a/src/game/SharedDefines.h b/src/game/SharedDefines.h
index d1d792f..91a2bd5 100644
--- a/src/game/SharedDefines.h
+++ b/src/game/SharedDefines.h
@@ -78,7 +78,7 @@ enum Classes
CLASS_SHAMAN = 7,
CLASS_MAGE = 8,
CLASS_WARLOCK = 9,
- // CLASS_UNK2 = 10,unused
+ CLASS_SPIRIT = 10,
CLASS_DRUID = 11,
};

@@ -89,11 +89,11 @@ enum Classes
((1<<(CLASS_WARRIOR-1))|(1<<(CLASS_PALADIN-1))|(1<<(CLASS_HUNTER-1))| \
(1<<(CLASS_ROGUE-1)) |(1<<(CLASS_PRIEST-1)) |(1<<(CLASS_SHAMAN-1))| \
(1<<(CLASS_MAGE-1)) |(1<<(CLASS_WARLOCK-1))|(1<<(CLASS_DRUID-1)) | \
- (1<<(CLASS_DEATH_KNIGHT-1)) )
+ (1<<(CLASS_SPIRIT-1)) |(1<<(CLASS_DEATH_KNIGHT-1)) )

#define CLASSMASK_ALL_CREATURES ((1<<(CLASS_WARRIOR-1)) | (1<<(CLASS_PALADIN-1)) | (1<<(CLASS_ROGUE-1)) | (1<<(CLASS_MAGE-1)) )

-#define CLASSMASK_WAND_USERS ((1<<(CLASS_PRIEST-1))|(1<<(CLASS_MAGE-1))|(1<<(CLASS_WARLOCK-1)))
+#define CLASSMASK_WAND_USERS ((1<<(CLASS_PRIEST-1))|(1<<(CLASS_MAGE-1))|(1<<(CLASS_WARLOCK-1))|(1<<(CLASS_SPIRIT-1)))

#define PLAYER_MAX_BATTLEGROUND_QUEUES 2

diff --git a/src/game/SpellEffects.cpp b/src/game/SpellEffects.cpp
index 9c8a1a8..36362d0 100644
--- a/src/game/SpellEffects.cpp
+++ b/src/game/SpellEffects.cpp
@@ -1615,8 +1615,9 @@ void Spell::EffectDummy(SpellEffectIndex eff_idx)
break;
case CLASS_PRIEST:
case CLASS_MAGE:
+ case CLASS_SPIRIT:
case CLASS_WARLOCK:
- spell_id = 67016; // SPD for Priests, Mages, Warlocks
+ spell_id = 67016; // SPD for Priests, Mages, Warlocks, Spiritualists
break;
case CLASS_SHAMAN:
// random (SPD, AP)
diff --git a/src/game/StatSystem.cpp b/src/game/StatSystem.cpp
index 9440217..cfa420c 100644
--- a/src/game/StatSystem.cpp
+++ b/src/game/StatSystem.cpp
@@ -340,6 +340,7 @@ void Player::UpdateAttackPowerAndDamage(bool ranged )
case CLASS_MAGE: val2 = GetStat(STAT_STRENGTH) - 10.0f; break;
case CLASS_PRIEST: val2 = GetStat(STAT_STRENGTH) - 10.0f; break;
case CLASS_WARLOCK: val2 = GetStat(STAT_STRENGTH) - 10.0f; break;
+ case CLASS_SPIRIT: val2 = GetStat(STAT_STRENGTH) - 10.0f; break;
}
}

@@ -881,7 +882,7 @@ bool Pet::UpdateStats(Stats stat)
//warlock's and mage's pets gain 30% of owner's intellect
else if ( stat == STAT_INTELLECT && getPetType() == SUMMON_PET )
{
- if(owner && (owner->getClass() == CLASS_WARLOCK || owner->getClass() == CLASS_MAGE) )
+ if(owner && (owner->getClass() == CLASS_WARLOCK || owner->getClass() == CLASS_MAGE || owner->getClass() == CLASS_SPIRIT) )
value += float(owner->GetStat(stat)) * 0.3f;
}

diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp
index 680567f..36d2951 100644
--- a/src/game/Unit.cpp
+++ b/src/game/Unit.cpp
@@ -1512,6 +1512,7 @@ void Unit::CalculateMeleeDamage(Unit *pVictim, uint32 damage, CalcDamageInfo *da
case CLASS_SHAMAN:
case CLASS_PRIEST:
case CLASS_MAGE:
+ case CLASS_SPIRIT:
case CLASS_WARLOCK:
case CLASS_DRUID:
baseLowEnd -= 0.7f;
@@ -5311,6 +5312,7 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu
case CLASS_PRIEST: // 40999,41002,41005,41009,41011,41406,41409
case CLASS_SHAMAN: // 40999,41002,41005,41009,41011,41406,41409
case CLASS_MAGE: // 40999,41002,41005,41009,41011,41406,41409
+ case CLASS_SPIRIT: // 40999,41002,41005,41009,41011,41406,41409
case CLASS_WARLOCK: // 40999,41002,41005,41009,41011,41406,41409
{
uint32 RandomSpell[]={40999,41002,41005,41009,41011,41406,41409};
@@ -6365,6 +6367,7 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu
triggered_spell_id = 28795; // Increases the friendly target's mana regeneration by $s1 per 5 sec. for $d.
break;
case CLASS_MAGE:
+ case CLASS_SPIRIT:
case CLASS_WARLOCK:
triggered_spell_id = 28793; // Increases the friendly target's spell damage and healing by up to $s1 for $d.
break;
@@ -6585,6 +6588,7 @@ bool Unit::HandleDummyAuraProc(Unit *pVictim, uint32 damage, Aura* triggeredByAu
triggered_spell_id = 28824; // Increases the friendly target's mana regeneration by $s1 per 5 sec. for $d.
break;
case CLASS_MAGE:
+ case CLASS_SPIRIT:
case CLASS_WARLOCK:
triggered_spell_id = 28825; // Increases the friendly target's spell damage and healing by up to $s1 for $d.
break;
[/code]

Liste des sorts

[code=sql]-- Cimetière
DELETE FROM `game_graveyard_zone` WHERE id = 18000;
INSERT INTO `game_graveyard_zone` (`id`, `ghost_zone`, `faction`) VALUES (1800, 6000, 0);

-- Text
INSERT INTO npc_text (ID, text0_0) VALUES (40000, 'Je ne peux vous entraîner, retounez à Esperita, quelqu''un pourra s''occuper de vous.');

-- Start Position
DELETE FROM `playercreateinfo` WHERE `class` = 10;
INSERT INTO `playercreateinfo` (`race`, `class`, `map`, `zone`, `position_x`, `position_y`, `position_z`) VALUES (1, 10, 1, 6000, 7245.368164, -3390.419922, 1006.4);
INSERT INTO `playercreateinfo` (`race`, `class`, `map`, `zone`, `position_x`, `position_y`, `position_z`) VALUES (6, 10, 1, 6000, 7245.368164, -3390.419922, 1006.4);
INSERT INTO `playercreateinfo` (`race`, `class`, `map`, `zone`, `position_x`, `position_y`, `position_z`) VALUES (10, 10, 1, 6000, 7245.368164, -3390.419922, 1006.4);
INSERT INTO `playercreateinfo` (`race`, `class`, `map`, `zone`, `position_x`, `position_y`, `position_z`) VALUES (11, 10, 1, 6000, 7245.368164, -3390.419922, 1006.4);

-- SpellChain
/* Connaissances astrales */
DELETE FROM `spell_chain` WHERE `spell_id` IN (85000, 85001, 85002, 85003, 85004, 85005);
INSERT INTO `spell_chain` (`spell_id`, `prev_spell`, `first_spell`, `rank`, `req_spell`) VALUES
(85000, 0, 85000, 1, 0),
(85001, 85000, 85000, 2, 0),
(85002, 85001, 85000, 3, 0),
(85003, 85002, 85000, 4, 0),
(85004, 85003, 85000, 5, 0),
(85005, 85004, 85000, 6, 0);

/* Invocations (mineure -> normale -> majeure) */
/* Vent */
DELETE FROM `spell_chain` WHERE `spell_id` IN (85006, 85007, 85008);
INSERT INTO `spell_chain` (`spell_id`, `prev_spell`, `first_spell`, `rank`, `req_spell`) VALUES
(85006, 0, 85006, 1, 0),
(85007, 85006, 85006, 2, 0),
(85008, 85007, 85006, 3, 0);

/* Terre */
DELETE FROM `spell_chain` WHERE `spell_id` IN (85009, 85010, 85011);
INSERT INTO `spell_chain` (`spell_id`, `prev_spell`, `first_spell`, `rank`, `req_spell`) VALUES
(85009, 0, 85009, 1, 0),

(85010, 85009, 85009, 2, 0),
(85011, 85010, 85009, 3, 0);

/* Eau */
DELETE FROM `spell_chain` WHERE `spell_id` IN (85012, 85013, 85014);
INSERT INTO `spell_chain` (`spell_id`, `prev_spell`, `first_spell`, `rank`, `req_spell`) VALUES
(85012, 0, 85012, 1, 0),
(85013, 85012, 85012, 2, 0),
(85014, 85013, 85012, 3, 0);

/* Feu */
DELETE FROM `spell_chain` WHERE `spell_id` IN (85015, 85016, 85017);
INSERT INTO `spell_chain` (`spell_id`, `prev_spell`, `first_spell`, `rank`, `req_spell`) VALUES
(85015, 0, 85015, 1, 0),
(85016, 85015, 85015, 2, 0),
(85017, 85016, 85015, 3, 0);

/* Ombre */
DELETE FROM `spell_chain` WHERE `spell_id` IN (85018, 85019, 85020);
INSERT INTO `spell_chain` (`spell_id`, `prev_spell`, `first_spell`, `rank`, `req_spell`) VALUES
(85018, 0, 85018, 1, 0),
(85019, 85018, 85018, 2, 0),
(85020, 85019, 85018, 3, 0);
/* Fin invocations */

/* Projections arcaniques */
DELETE FROM `spell_chain` WHERE `spell_id` IN (85028, 85030, 85032, 85034, 85036, 85038);
INSERT INTO `spell_chain` (`spell_id`, `prev_spell`, `first_spell`, `rank`, `req_spell`) VALUES
(85028, 0, 85028, 1, 0),
(85030, 85028, 85028, 2, 0),
(85032, 85030, 85028, 3, 0),
(85034, 85032, 85028, 4, 0),
(85036, 85034, 85028, 5, 0),
(85038, 85036, 85028, 6, 0);

/* Fouet arcanique */
DELETE FROM `spell_chain` WHERE `spell_id` IN (85040, 85041, 85042, 85043);
INSERT INTO `spell_chain` (`spell_id`, `prev_spell`, `first_spell`, `rank`, `req_spell`) VALUES
(85040, 0, 85040, 1, 0),
(85041, 85040, 85040, 2, 0),
(85042, 85041, 85040, 3, 0),
(85043, 85042, 85040, 4, 0);

-- SpellTargetPosition
DELETE FROM `spell_target_position` WHERE `id` = 85006;
INSERT INTO `spell_target_position` (`id`, `target_map`, `target_position_x`, `target_position_y`, `target_position_z`, `target_orientation`) VALUES (85006, 1, 7231.335938, -3366.374512, 1006.4, 4.46);[/code]

[code=sql]-- Portail Esperita
DELETE FROM `gameobject_template` WHERE `entry` = 500000;
DELETE FROM `locales_gameobject` WHERE `entry` = 500000;
INSERT INTO `locales_gameobject` (`entry`, `name_loc2`) VALUES (500000, 'Portail vers Esperita');
INSERT INTO `gameobject_template` (`entry`, `type`, `displayId`, `name`, `data0`, `data2`, `data3`) VALUES (500000, 22, 4394, 'Portal to Esperita', 85027, 1, 1);

/*
* Spell : Invocation d'un esprit du feu majeur
*/

/* SQL */
DELETE FROM `creature_template`
WHERE `entry` = 60002;
INSERT INTO `creature_template`
(`entry`, `difficulty_entry_1`, `difficulty_entry_2`, `difficulty_entry_3`, `KillCredit1`, `KillCredit2`, `modelid_A`, `modelid_A2`,
`modelid_H`, `modelid_H2`, `name`, `subname`, `IconName`, `gossip_menu_id`, `minlevel`, `maxlevel`, `minhealth`, `maxhealth`, `minmana`,
`maxmana`, `armor`, `faction_A`, `faction_H`, `npcflag`, `speed_walk`, `speed_run`, `scale`, `rank`, `mindmg`, `maxdmg`, `dmgschool`,
`attackpower`, `dmg_multiplier`, `baseattacktime`, `rangeattacktime`, `unit_class`, `unit_flags`, `dynamicflags`, `family`, `trainer_type`,
`trainer_spell`, `trainer_class`, `trainer_race`, `minrangedmg`, `maxrangedmg`, `rangedattackpower`, `type`, `type_flags`, `lootid`,
`pickpocketloot`, `skinloot`, `resistance1`, `resistance2`, `resistance3`, `resistance4`, `resistance5`, `resistance6`, `spell1`, `spell2`,
`spell3`, `spell4`, `PetSpellDataId`, `mingold`, `maxgold`, `AIName`, `MovementType`, `InhabitType`, `unk16`, `unk17`, `RacialLeader`,
`questItem1`, `questItem2`, `questItem3`, `questItem4`, `questItem5`, `questItem6`, `movementId`, `RegenHealth`, `equipment_id`,
`mechanic_immune_mask`, `flags_extra`, `ScriptName`)
VALUES
(60002, 0, 0, 0, 0, 0, 25680, 0, 25680, 0, 'Esprit du feu majeur', '', '', 0, 1, 1, 1, 1, 0, 0, 3396, 35, 35, 0, 1.1, 1.14286, 1, 0, 300,
400, 0, 1000, 3.5, 2000, 0, 1, 0, 0, 0, 0, 0, 0, 0, 69, 101, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 1, 3, 0.25, 1,
0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 8388624, 0, '');

/*
* Spell : Appel des esprits mineurs
*/

/* SQL */
DELETE FROM `creature_template`
WHERE `entry` = 60001;

INSERT INTO `creature_template`

(`entry`, `difficulty_entry_1`, `difficulty_entry_2`, `difficulty_entry_3`, `KillCredit1`, `KillCredit2`, `modelid_A`, `modelid_A2`,
`modelid_H`, `modelid_H2`, `name`, `subname`, `IconName`, `gossip_menu_id`, `minlevel`, `maxlevel`, `minhealth`, `maxhealth`, `minmana`,
`maxmana`, `armor`, `faction_A`, `faction_H`, `npcflag`, `speed_walk`, `speed_run`, `scale`, `rank`, `mindmg`, `maxdmg`, `dmgschool`,
`attackpower`, `dmg_multiplier`, `baseattacktime`, `rangeattacktime`, `unit_class`, `unit_flags`, `dynamicflags`, `family`, `trainer_type`,
`trainer_spell`, `trainer_class`, `trainer_race`, `minrangedmg`, `maxrangedmg`, `rangedattackpower`, `type`, `type_flags`, `lootid`,
`pickpocketloot`, `skinloot`, `resistance1`, `resistance2`, `resistance3`, `resistance4`, `resistance5`, `resistance6`, `spell1`, `spell2`,
`spell3`, `spell4`, `PetSpellDataId`, `mingold`, `maxgold`, `AIName`, `MovementType`, `InhabitType`, `unk16`, `unk17`, `RacialLeader`,
`questItem1`, `questItem2`, `questItem3`, `questItem4`, `questItem5`, `questItem6`, `movementId`, `RegenHealth`, `equipment_id`,
`mechanic_immune_mask`, `flags_extra`, `ScriptName`)
VALUES
(60001, 0, 0, 0, 0, 0, 20594, 1824, 20594, 1824, 'Esprit mineur ', '', '', 0, 1, 1, 1, 1, 0, 0, 7, 35, 35, 0, 1, 1.14286, 1, 0, 2, 2, 0,
24, 1, 2000, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 0, 3, 0.301265, 1, 0, 0, 0, 0,
0, 0, 0, 0, 1, 0, 8388624, 0, '');

/*
* Spell : Invocation d'un esprit du vent mineur
*/

/* SQL */
DELETE FROM `creature_template`
WHERE `entry` = 60000;
INSERT INTO `creature_template`
(`entry`, `difficulty_entry_1`, `difficulty_entry_2`, `difficulty_entry_3`, `KillCredit1`, `KillCredit2`, `modelid_A`, `modelid_A2`,
`modelid_H`, `modelid_H2`, `name`, `subname`, `IconName`, `gossip_menu_id`, `minlevel`, `maxlevel`, `minhealth`, `maxhealth`, `minmana`,
`maxmana`, `armor`, `faction_A`, `faction_H`, `npcflag`, `speed_walk`, `speed_run`, `scale`, `rank`, `mindmg`, `maxdmg`, `dmgschool`,
`attackpower`, `dmg_multiplier`, `baseattacktime`, `rangeattacktime`, `unit_class`, `unit_flags`, `dynamicflags`, `family`, `trainer_type`,
`trainer_spell`, `trainer_class`, `trainer_race`, `minrangedmg`, `maxrangedmg`, `rangedattackpower`, `type`, `type_flags`, `lootid`,
`pickpocketloot`, `skinloot`, `resistance1`, `resistance2`, `resistance3`, `resistance4`, `resistance5`, `resistance6`, `spell1`, `spell2`,
`spell3`, `spell4`, `PetSpellDataId`, `mingold`, `maxgold`, `AIName`, `MovementType`, `InhabitType`, `unk16`, `unk17`, `RacialLeader`,
`questItem1`, `questItem2`, `questItem3`, `questItem4`, `questItem5`, `questItem6`, `movementId`, `RegenHealth`, `equipment_id`,
`mechanic_immune_mask`, `flags_extra`, `ScriptName`)
VALUES
(60000, 0, 0, 0, 0, 0, 18245, 0, 18245, 0, 'Esprit du vent mineur', '', '', 0, 1, 1, 1, 1, 0, 0, 3396, 35, 35, 0, 1.1, 1.14286, 1, 0,
300, 400, 0, 1000, 3.5, 2000, 0, 1, 0, 0, 0, 0, 0, 0, 0, 69, 101, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, '', 1, 3,
0.25, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 8388624, 0, '');
[/code]
Amazing
Très gros boulot GG
Effectivement! gros boulot !!!
Félicitations !
excelent
On dirait un mage,chevalier de la mort.

GG
J'adore Smile

Y a du bon boulot la Smile
Enorme Huh Pourquoi avoir abandonné ?
A mon avis, et vu comme on ne la voit plus beaucoup, elle se concentre énormément sur ses études.

Retourner en haut Accueil