Besoin d'un coup de pouce.
Bonsoir.

Je me lance dans un projet de champ de bataille en pleine air mais voilà le début me bloque. Je cherche donc quelqu'un d'aimable pouvant me lancer ...

Je souhaiterais que lorsqu'un joueur entre dans une zone précise il soit enregistrer dans une table mais voilà comment mettre la fonction void Player::UpdateArea(uint32 newArea) dans un custom script ?

Cordialement.
Tu peut, je pense implémenter un fonction qui ferait bien cela.
Je m'explique :
dans la classe PlayerScript de ScriptMgr, ajouter un fonction virtual void du genre :
Code :
OnPlayerEnterZone(Player* /*player*/, uint32 /*area*/)
, et puis dans Player::UpdateArea(uint32 newArea) tu déclenche l'évènement :
Code :
sScriptMgr->OnPlayerEnterZone(this,newArea);


Comme sa dans tes script tu pourra avoir un truc du genre :

Code :
Void OnPlayerEnterZone(Player* player, uint32 area)
{
if(area = tonAreaId)
...
}

Après, il faut tester, mais ça devrait en théorie fonctionner.
Édition :
J'ai testé sur mon core ça fonctionne parfaitement Clin
Voila le problème lors de la compilation ... : error LNK2019: symbole externe non résolu "public: void __thiscall ScriptMgr::OnPlayerEnterZone(class Player *,unsigned int)" (?OnPlayerEnterZone@ScriptMgr@@QAEXPAVPlayer@@I@Z) référencé dans la fonction "public: void __thiscall Player::UpdateArea(unsigned int)" (?UpdateArea@Player@@QAEXI@Z)
Ah ça c'est la merde ... refais ta solution avec cmake ?
Déjà fait mais je crois que c'est cette partie qui pose un problème "unsigned int" ...
Pourrait tu nous mettre ce que tu a ajouté au code source ?
Dans : ScriptMgr.h => class PlayerScript : public ScriptObject
Code :
virtual void OnPlayerEnterZone(Player* /*player*/, uint32 /*area*/) { }

Suite a une erreur à la compilation il fallait aussi ajouter dans: ScriptMgr.h => class ScriptMgr
publicEtonne* PlayerScript */

Code :
void OnPlayerEnterZone(Player* player, uint32 area);

Ensuite pour finir dans Player.cpp => void Player::UpdateArea(uint32 newArea)

Code :
sScriptMgr->OnPlayerEnterZone(this,newArea);

Et lors de la compile je retrouve l'erreur cité plus haut.
Ajoute sa dans ScriptMgr.cpp :
Code :
void ScriptMgr::OnEnterArea(Player *player, uint32 area)
{
    FOREACH_SCRIPT(PlayerScript)->OnEnterArea(player, area);
}
La compilation c'est déroulé avec succès mais maintenant lorsque je souhaite voir si mon script test marche rien ne se passe ais-je fait une erreur ?

[code=cpp]#include "ScriptPCH.h"

class Enter : public PlayerScript
{
public:
Enter() : PlayerScript("Enter") {}



void OnPlayerEnterArea(Player* player, uint32 area)
{
if(area == 2563)
{
char msg[500];
sprintf(msg, "Test de fonctionnement");
sWorld.SendWorldText(LANG_SYSTEMMESSAGE, msg);
}
}
};

void AddSC_Enter()
{
new Enter();
}[/code]
Normalement ça devrait être bon, faut voir si l'event est bien déclenché, et aussi


essaye [code=cpp]void AddSC_Enter()
{
new Enter();
}[/code]

Retourner en haut Accueil