PNJ Annonce
Voici un pnj qui fait des annonces avec du texte ajouté dans la base de donnée.

[code=diff]src\server\scripts\Custom\CMakeLists.txt
set(scripts_STAT_SRCS
${scripts_STAT_SRCS}
+ Custom\annonce_creature.cpp
)

src\server\game\Scripting\ScriptLoader.cpp
void AddBattlegroundScripts()
{
#ifdef SCRIPTS
#endif
}

#ifdef SCRIPTS
+void AddSC_annonce_creature();
/* This is where custom scripts' loading functions should be declared. */

#endif

void AddCustomScripts()
{
#ifdef SCRIPTS
+AddSC_annonce_creature();
/* This is where custom scripts should be added. */
#endif
}

src/game/World/World.cpp
// AutoBroadcast
m_bool_configs[CONFIG_AUTOBROADCAST] = sConfig.GetBoolDefault("AutoBroadcast.On", false);
m_int_configs[CONFIG_AUTOBROADCAST_CENTER] = sConfig.GetIntDefault("AutoBroadcast.Center", 0);
m_int_configs[CONFIG_AUTOBROADCAST_INTERVAL] = sConfig.GetIntDefault("AutoBroadcast.Timer", 60000);
+
+ m_bool_configs[CONFIG_PNJANNOUNCE_ENABLE] = sConfig.GetBoolDefault("PnjAnnonce.Enable", false);
+ m_int_configs[CONFIG_PNJANNOUNCE_CHOIX] = sConfig.GetIntDefault("PnjAnnonce.choix", 0);
+ m_int_configs[CONFIG_PNJANNOUNCE_INTERVALLE] = sConfig.GetIntDefault("PnjAnnonce.intervale", 300);

sScriptMgr.OnConfigLoad(reload);
}

src/game/World/World.h
CONFIG_DUNGEON_FINDER_ENABLE,
CONFIG_AUTOBROADCAST,
+ CONFIG_PNJANNOUNCE_ENABLE,
+
+ BOOL_CONFIG_VALUE_COUNT

src/game/World/World.h
CONFIG_AUTOBROADCAST_INTERVAL,
CONFIG_MAX_RESULTS_LOOKUP_COMMANDS,
+ CONFIG_PNJANNOUNCE_CHOIX,
+ CONFIG_PNJANNOUNCE_INTERVALLE,

INT_CONFIG_VALUE_COUNT
};

src/server/worldserver/worldserver.conf.dist
CharDelete.MinLevel = 0
CharDelete.KeepDays = 30
+
+###########################################################​####################
+# PNJ ANNONCE
+#
+# PnjAnnonce.Enable
+# Active le systeme d'annonce
+# Defaut: 0 - off
+# 1 - on
+#
+# PnjAnnonce.choix
+# Choix du type
+# Defaut: 0 - dire
+# 1 - crier
+#
+# PnjAnnonce.intervale
+# Intervalle des annonces en secondes
+#
+###########################################################​####################
+
+PnjAnnonce.choix = 0
+PnjAnnonce.intervale = 300
+
############################################################​###################
# CUSTOM SERVER OPTIONS[/code]

Fichier script à ajouter dans src\server\scripts\Custom avec l'extension .cpp
[code=cpp]#include "ScriptPCH.h"

void SendAnnonce(Creature * me)
{
std::string msg;

QueryResult result;
result = LoginDatabase.PQuery("SELECT `message` FROM `annonces` ORDER BY RAND() LIMIT 1");

if(!result)
return;
Field *fields = result->Fetch();
msg = fields[0].GetString();

static uint32 choix = 0;
choix = sWorld.getIntConfig(CONFIG_PNJANNOUNCE_CHOIX);
if(choix == 0)
{
me->MonsterSay(msg.c_str(), LANG_UNIVERSAL, 0);

sLog.outString("PnjAnnonce: '%s'",msg.c_str());
}
if(choix == 1)
{
me->MonsterYell(msg.c_str(), LANG_UNIVERSAL, 0);

sLog.outString("PnjAnnonce: '%s'",msg.c_str());
}
}

enum Yells
{
SAY_DANCE = -1999908,
SAY_SALUTE = -1999909,
};

class annonce_creature : public CreatureScript
{
public:

annonce_creature()
: CreatureScript("annonce_creature")
{
}

struct annonce_creatureAI : public ScriptedAI
{
annonce_creatureAI(Creature *c) : ScriptedAI© {}

uint32 m_annonceTimer;

void Reset()
{
m_annonceTimer = sWorld.getIntConfig(CONFIG_PNJANNOUNCE_INTERVALLE)*IN_MILLIS​ECONDS;
}

void ReceiveEmote(Player* /*pPlayer*/, uint32 uiTextEmote)
{
me->HandleEmoteCommand(uiTextEmote);

switch(uiTextEmote)
{
case TEXTEMOTE_DANCE:
DoScriptText(SAY_DANCE, me);
break;
case TEXTEMOTE_SALUTE:
DoScriptText(SAY_SALUTE, me);
break;
}
}

void UpdateAI(const uint32 uiDiff)
{
if (!sWorld.getBoolConfig(CONFIG_PNJANNOUNCE_ENABLE))
return;

if (m_annonceTimer <= uiDiff)
{
SendAnnonce(me);

m_annonceTimer = sWorld.getIntConfig(CONFIG_PNJANNOUNCE_INTERVALLE)*IN_MILLIS​ECONDS;
}
else
m_annonceTimer -= uiDiff;
}
};

CreatureAI* GetAI(Creature* creature) const
{
return new annonce_creatureAI(creature);
}
};

void AddSC_annonce_creature()
{
new annonce_creature();
}[/code]

Base de donnée en relation avec le scrip
[code=sql]DROP TABLE IF EXISTS `boutique_services_annonces`;
CREATE TABLE IF NOT EXISTS `boutique_services_annonces` (
`id` bigint(40) NOT NULL AUTO_INCREMENT COMMENT 'Annonce Identifier',
`message` varchar(255),
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='Pnj annonce';[/code]
Hum, merci pour ce script mais je n'ai pas compris l'utilité comparé a un bon vieux autobroadcast ?
Il parle en jaune ou fait des annonces world Smile ?
La c'est le pnj qui parler soit en /crier soit en /dire dans une zone. Après tu peux lui faire ajouter des waypoints etc ou prendre le script comme base et en faire autre chose Smile.
Merci peut servir.

Cdt
Hum, ont peux faire simplement avec de l'EventAI non ? D'ailleurs j'aimerais bien savoir

Retourner en haut Accueil