MJ started
Bonjour à tous.

Version du patch:

Base de donnés UDB
version client Wow 3.3.5a

Je vien vous présenter mon nouveau patch que j'ai nommer MJ_Started.

Celui-ci a pour but d'apprendre tous les sorts de MJ et ainsi le stuff MJ de départ et le level 255 pour les nouveaux GM arrivant sur votre serveur.

Remarques:
Pnj invisible aux joueurs biensur, un simple ".gm on" et hop celui-ci apparait.

Screen:
http://download-appli.no-ip.org/maitre.png
http://download-appli.no-ip.org/maitre1.png

Le script c++ :

Citation : #include "precompiled.h"

#define LIMIT_GMSORT 102

uint32 m_gmsort[]=
{
35354, 7033, 37808, 42459, 8737, 10665, 35912, 42340, 30878,
17624, 27572, 46568, 45729,40158, 26898,9116,
33338,33339, 33340,41601,36563,33341,264,2567,37851,
46661, 42584, 196,19693,35874,35912,36001,38734,45813,
33678,36624,9077,35466,34091,30638,197,750,46681,36812,
41084,20733,198,199,200,201,202,203,30452,37805,37810,
11027, 11397,37807,44016,45215,40890,34873,37208,43113,
39872,28783,39089,46367,43343,18209,18210,44639,
41251,39089, 19630,41431,40733,40506,35354,24742,
37897,26029,22856,11,5,17743,22735,45209,27741,42755,
15851,29388,7355, 43114,34580,40930,40928,10092,27882,
42333, 44655,38897,
};

bool GossipHello_teste_mj(Player* pPlayer, Creature* pCreature)
{
if(pPlayer->GetSession()->GetSecurity() >= SEC_GAMEMASTER)
{
pPlayer->ADD_GOSSIP_ITEM( 3, "Mes sorts MJ " , GOSSIP_SENDER_MAIN, 7000);
pPlayer->ADD_GOSSIP_ITEM( 1, "Mes equipements " , GOSSIP_SENDER_MAIN, 7001);
pPlayer->ADD_GOSSIP_ITEM( 3, "Mes Levels" , GOSSIP_SENDER_MAIN, 7002);
pPlayer->ADD_GOSSIP_ITEM( 0, "Au revoir !" , GOSSIP_SENDER_MAIN, 1058);
}
else{
pCreature->MonsterWhisper("Mes objets et competences requierts un grade GameMaster", pPlayer);
}
pPlayer->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE,pCreature->GetObjectGuid());
return true;
}
void SendDefaultMenu_teste_mj(Player* pPlayer, Creature* pCreature, uint32 uiAction)
{
if (pPlayer->isInCombat())
{
pPlayer->CLOSE_GOSSIP_MENU();
pCreature->MonsterSay("Vous etes en combat!", LANG_UNIVERSAL, NULL);
return;
}
switch(uiAction)
{
case 7000Etonne/ Au revoir !
for(uint32 i = 0 ; i < LIMIT_GMSORT ; i++)
{
pPlayer->learnSpell(m_gmsort[i],false);
}
pPlayer->CLOSE_GOSSIP_MENU();
pCreature->MonsterWhisper("Au revoir, aventurier !",pPlayer);
break;


case 7001:
pPlayer->SEND_VENDORLIST(pCreature->GetObjectGuid());
break;

case 7002:
if (pPlayer->getLevel() == 255)
{
pCreature->MonsterWhisper("Tu est deja level 255 !",pPlayer); //You are already 80
pPlayer->CLOSE_GOSSIP_MENU();
}
else
{
pPlayer->GiveLevel(pPlayer->getLevel()+(255 - (pPlayer->getLevel())));
pPlayer->CLOSE_GOSSIP_MENU();
}

pCreature->MonsterWhisper("Au revoir, aventurier !",pPlayer);
break;

case 1058Etonne/ Au revoir !
pPlayer->CLOSE_GOSSIP_MENU();
pCreature->MonsterWhisper("Au revoir, aventurier !",pPlayer);
break;
}
}
bool GossipSelect_teste_mj(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction)
{

if (uiSender == GOSSIP_SENDER_MAIN)
SendDefaultMenu_teste_mj(pPlayer, pCreature, uiAction);

return true;
}
void AddSC_teste_mj()
{
Script *newscript;

newscript = new Script;
newscript->Name = "mj_started";
newscript->pGossipHello = &GossipHello_teste_mj;
newscript->pGossipSelect = &GossipSelect_teste_mj;
newscript->RegisterSelf();
}


Le script sql:
Citation :DELETE FROM `creature_template` WHERE `entry` = 60008;
INSERT INTO `creature_template` (`entry`, `difficulty_entry_1`, `difficulty_entry_2`, `difficulty_entry_3`, `KillCredit1`, `KillCredit2`, `modelid_1`, `modelid_2`, `modelid_3`, `modelid_4`, `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`, `vehicle_id`, `equipment_id`, `trainer_id`, `vendor_id`, `mechanic_immune_mask`, `flags_extra`, `ScriptName`) VALUES (60008, 0, 0, 0, 0, 0, 28193, 28193, 28193, 28193, 'Maitre des MJ', 'Apprentissage', '', 0, 75, 75, 15952, 15952, 0, 0, 8219, 35, 35, 129, 1, 1.14286, 1, 0, 342, 485, 0, 392, 1, 2000, 0, 1, 0, 0, 0, 0, 0, 0, 0, 295, 438, 68, 7, 0, 0, 3296, 0, 0, 0, 0, 0, 0, 0, 40505, 8599, 0, 0, 0, 0, 0, '', 0, 1, 1.5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 295, 0, 0, 0, 1, 'mj_started');
DELETE FROM `npc_vendor` WHERE (`entry`=60008);
INSERT INTO `npc_vendor` (entry, item, maxcount, incrtime, ExtendedCost) VALUES
(60008, 2586, 0, 0, 0),
(60008, 11508, 0, 0, 0),
(60008, 12064, 0, 0, 0);

Télécharger les patchs :
Script C++ / Sql

voila pour le script ou les liens.
SI les liens sont mort n'hésiter pas je les mettrai sur Megaupload.

Post Réediter:
Rajout du Menu Mes levels.

N'hesiter pas à me faire remonter la moindre erreure, je corrigerai celle-ci très rapidement.

Post editer :
Changement de if (pPlayer->IsGameMaster()) en if(pPlayer->GetSession()->GetSecurity() >= SEC_GAMEMASTER)

Flag_extra du fichiers sql remis en 1 au lieu de 130

PNJ visible par tous le monde maintenant mais requiert le grade de gamemaster pour voir le menu.

Cordialement Tøxic
Uhm , tu peux largement améliorer le script , plutôt qu'un isGamemaster() pourquoi pas un getSecurity() ?
Pareille pour les sort tu peut faire un gmsort[] avec des commentaire et mettre juste une boucle dans le case 7000(qui est pas propre d’ailleurs tu as GOSSIP_DEF)
peut tu m'eclairer sur la fonction getsecurity que je ne connais pas trop et pour la boucle j'ai pas trop compris c'est que mon deuxieme patch merci a toi.
(23-10-2011 22:36)Tøxïc a écrit :  peut tu m'eclairer sur la fonction getsecurity que je ne connais pas trop et pour la boucle j'ai pas trop compris c'est que mon deuxieme patch merci a toi.

[code=cpp]if(pPlayer->GetSession()->GetSecurity() >= SEC_GAMEMASTER)
{
[...]
}[/code]
Le getsecurity sert à vérifier que le joueur a un grade MJ ( ici, le grade gamemaster )
La fonction isGamemaster vérifie uniquement que le joueur est en .gm on.

Sachant qu'il faut être en .gm on pour voir ton PNJ, c'est une vérification redondante et donc inutile.

Cordialement,
MacWarrior.
je te remercie pour cette reponse et pa rapport a la boucle comment puis je my prendre plizz merci.
Ayant toujours utilisé des
[code=cpp]
pPlayer->learnSpell(38897,false);
[/code]
en masse, je ne saurai affirmer une réponse ( ne pouvant rien tester en ce moment ).

Je suppose qu'il suffit de faire un tableau comprenant chaque id de sorts, puis de faire une boucle qui parcourt ce tableau en faisant le learn de chaque id au joueur Clin

Cordialement,
MacWarrior.
Ok mac je me remet dessus dès que j'ai un peu de temps merci à vous, j'aimerai avant tous savoir si il a été utile à quelqu'un .

A beintot.
Édition :
Ok mac je me remet dessus dès que j'ai un peu de temps merci à vous, j'aimerai avant tous savoir si il a été utile à quelqu'un .

A beintot.
En gros oui un tableau Smile

Code :
uint32 m_gmsort[]
{
     15464, //Ici on est au m_gmsort[0] t peux mettre SPELL XXXX
      15465, //Ici on est au m_gmsort[1] t peux mettre SPELL XXXX
}

for(uint32 i = 0 ; i ==1; i++)
{
    pPlayer->learnSpell(m_gmsort[i],false);
}

Aprés il doit y avoir une erreur de syntax car je fais ça de tête, fait attention au crash car si tu veux un m_gmsort[] qui n'existe pas le serveur crasheras Smile dans c'est cas là un petit define

#define LIMIT_GMSORT 2 //Car j'a ideux sort
Ok je vois le genre de code j'essaie actuellement de l'exploiter mais cette ligne me pose probleme:

for(uint32 i = 0 ; i ==1; i++)
{
pPlayer->learnSpell(m_gmsort[i],false);
}

tu met i == 1 moi sa ne sera pas == 1 mais par contre je ne vois pas quoi mettre je suis juste debutant en c++ je cherche a force de je vais trouver
apre le define j'en utilise jamais je c pas trop les exploiter non plus

Ta pas un bout de code avec le define et i == 1 a la plae du 1 je met quoi?


merci.
en gros je te traduit la ligne pour que tu comprenne les boucle

Pour ( un uint32 i = 0//car on commence de zero; i==1//Jusqu'a 1; i++(on increment)

Tu a juste a remplacer le 1 par LIMIT_GMSORT Smile

Retourner en haut Accueil