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_MILLISECONDS;
}
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_MILLISECONDS;
}
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]