Share Pastebin
Guest
Public paste!

Neo2k / LevelArena

By: a guest | Mar 11th, 2010 | Syntax: C++ | Size: 2.71 KB | Hits: 81 | Expires: Never
Copy text to clipboard
  1. #include "StdAfx.h"
  2. #include "Setup.h"
  3.  
  4.  
  5. #ifdef WIN32
  6. #pragma warning(disable:4305)
  7. #endif
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15. class SCRIPT_DECL LevelArenaNPC : public GossipScript
  16. {
  17.  
  18. public:
  19.         void Destroy()
  20.         {
  21.                 delete this;
  22.         }
  23.  
  24.  
  25. int DLevelGruppe(Player * plr)
  26. {
  27.  
  28. double average = 0;
  29. int c = 0, avg = 0;
  30.  
  31.         GroupMembersSet::iterator itr = plr->GetGroup()->GetSubGroup(plr->GetSubGroup())->GetGroupMembersBegin(); // Iterator zum Durchlaufen
  32.         GroupMembersSet::iterator end = plr->GetGroup()->GetSubGroup(plr->GetSubGroup())->GetGroupMembersEnd(); // NULL-Iterator
  33.  
  34.         for(; itr != end; ++itr)
  35.         {
  36.                 Player* pPlr = objmgr.GetPlayer((*itr)->guid);
  37.                 if(pPlr) // wenn Gruppenmitglied gefunden
  38.                 {
  39.                         average += pPlr->getLevel(); // Level addieren
  40.                         ++c; // Mitgliederanzahl erhöhen
  41.                 }
  42.         }
  43.         average /= c; // addierte Level aller Spieler durch Anzahl teilen
  44.         avg = int(average); // Durchschnittswert ganzzahlig machen
  45.         if(!plr)
  46.         return 0;
  47. }
  48.  
  49.  
  50.        
  51. void GossipHello(Object* pObject, Player * Plr, bool AutoSend)
  52.     {
  53.        GossipMenu *Menu;
  54.                 objmgr.CreateGossipMenuForPlayer(&Menu, pObject->GetGUID(), 2593, Plr);
  55.  
  56.                 Menu->AddItem(0, "Gib mir die Anzahl der Gruppenmitglieder", 1);
  57.                 Menu->AddItem(0, "Bespawne die LevelArena!", 3);
  58.                 Menu->AddItem(0, "Auf Wiedersehen", 2);
  59.  
  60.                 if(AutoSend)
  61.                 Menu->SendTo(Plr);
  62.     }
  63.  
  64.  
  65. void GossipSelectOption(Object* pObject, Player* Plr, uint32 Id, uint32 IntId, const char * Code)
  66. {
  67.  
  68.  
  69.  
  70.  
  71.  
  72.   switch(IntId)
  73.   {
  74.         case 0:     // Return to start
  75.             GossipHello(pObject, Plr, true);
  76.         break;
  77.  
  78.  
  79.  
  80.  
  81.                 case 1:
  82.                         {
  83.  
  84.  
  85.                                 int dlevel = DLevelGruppe(Plr);
  86.                                 SubGroup * group = Plr->GetGroup() ?
  87.                                 Plr->GetGroup()->GetSubGroup(Plr->GetSubGroup()) : 0;
  88.  
  89.                                 if(group == 0)
  90.                                 {
  91.                                         Plr->BroadcastMessage("Keine Gruppe!");
  92.                                 }
  93.                                 else
  94.                                 {
  95.  
  96.                                 Plr->BroadcastMessage("Eure Gruppe hat %u Mitglieder!", group->GetMemberCount());
  97.                                 Plr->BroadcastMessage("Das Durchschnittslevel betraegt %i!", dlevel);
  98.                                 Plr->Gossip_Complete();
  99.                                 }
  100.  
  101.  
  102.                         }
  103.                         break;*/
  104.  
  105.                                 case 2:
  106.                                         {
  107.                                                 Plr->Gossip_Complete();
  108.                                         }
  109.                                 break;
  110.  
  111.  
  112.  
  113.                                 case 3:
  114.                                         {
  115.  
  116.                                                 int dlevel = DLevelGruppe(Plr);
  117.                                                 QueryResult* res = WorldDatabase.Query("SELECT * FROM lvlarena_npc WHERE level = %u", (uint32)dlevel);
  118.  
  119.                                                 if(res)
  120.                                                 {                                                      
  121.                                                         Plr->BroadcastMessage("Es gibt %u Zeilen in der Table lvlarena_npc", res->GetRowCount());
  122.                                                 }
  123.  
  124.                                                         while(res->NextRow());
  125.                                                         delete res;
  126.                                         }
  127.                                 break;
  128.  
  129.                 }
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136. }
  137. };
  138.  
  139.  
  140.                                
  141.  
  142.  
  143.  
  144.         void SetupLevelArenaNPC(ScriptMgr * mgr)
  145.  {
  146.      GossipScript * lvlscript = (GossipScript*) new LevelArenaNPC();
  147.      mgr->register_gossip_script(76500, lvlscript);
  148.  }