Jump to content
  • Announcements

    • Xmat

      Pravidlo pro postování v TTT

      Do sekce Tipy, triky, tutoriály nepatří žádné dotazy.   Postujte sem vaše návody, tipy a různé další věci jež uznáte za vhodné sdělit zdejšímu osazenstvu, ale veškeré dotazy směřujte do sekce Všeobecná diskuse.
    • Replik

      Seznam návodů a důležitých témat v této sekci

      Pro lepší přehlednost jsem vytvořil tento seznam, který vás, méně zkušené, lépe provede touto sekcí. Věřím, že zde najdete, co hledáte. Vypsané jsou návody, které jsou oficiálně uznané jako návody. Běžné diskuze, které neposkytují postupy a rady zvěřejněny nejsou.   Instalace vlastního MaNGOS Serveru Díky těmto návodům budete (měli by jste být) schopni vytvořit a následně spustit váš vlastní server. Nastavení je pro verze s i bez datadisku.   Instalace MaNGOS Serveru (bez datadisku TBC) - Autor Benny Instalace MaNGOS Serveru (s datadiskem TBC) - Autor Malfik Instalace MaNGOS Serveru v prostředí Linux - Autor charlie Instalace MaNGOS Serveru v prostředí Linux - Autor kupkoid   Chyby a jejich řešení při přihlašování k serveru - Autor Cybe   Zálohování uživatelských dat   Dávkový soubor (BAT soubor) pro vytvoření SQL záloh - Autor Replik   Kompilování - tvoření vlastních release (revizí)   Tvorba kompilací pro Win32 (MangoScript) - Autor bLuma   Ostatní - těžko zařaditelné, ale neznamená to, že nejsou dobré   VIP Systém - Autor charlie Tvorba Webových stránek pro MaNGOS - Autor zahuba Tvorba teleportačních NPC (MangoScript) - Autor Replik Registrační web (původně předělaná SPORA) Funkční pro Antrix i MaNGOS - Autor Replik Nastavení a spuštění Minimanager pro MaNGOS - Autor BlackMartin Nastavení MaNGOS Website - Autor Artorius   Samozřejmě jsou zde i jiné návody, ale tyto jsou nejvíce používané, proto věřím, že vám budou nápomocné. Tuto sekci budeme upravovat podle potřeby. Pokud by jste něco nenašli nebo si nevěděli rady, hledejte na fóru a teprve potom založte vlastní topik. Pokud nějaký autor vytvoří kvalitní návod a chtěl by ho zveřejnit i v tomto seznamu, doporučuji, aby mi napsal zprávu skrze PM.   Díky a přeji hezký den na WoWResource   Replik
    • Aristo

      Příspěvky tam, kde nemají co dělat

      Dodržujte zákaz přispívání do topiků s repaky pokud si to zakladatelé nepřejí!! Opakované psaní příspěvků bude trestáno warnem.
    • Aristo

      Používání spoilerů

      Poslední dobou má většina uživatelů fora zvláštní nutkání postovat extrémně dlouhé texty nebo kódy, které zabírají v nejedenom případu i 80% obsahu celé stránky a hodně tak zvedají nepřehlednost v topiku. Chtěl bych všechny uživatele požádat, aby při postování citací, jakýchkoliv kódů, errorů, atp... delších než 30 řádků používali funkci spoileru.   Funkci vyvoláte příkazem [spoiler] text [/spoiler]   Ukázka:  
minig

[C++] VIP NPC

Recommended Posts

+rep mě na nic ale Udělej pro TBC:D

Edited by heso

Share this post


Link to post
Share on other sites

Tak mi pošli nějakej script... nevím jakej to má script systém... by the way, na TBC bych doporučil spíš oregon než trinity

Share this post


Link to post
Share on other sites

Náhodou někdo neví jak se jmenuje ta funkce abych to dal za peníze prosím? :nw2_guitar:

Něco jako tadyto?

 

player->ModifyMoney(-penize_v_copperech);

Edited by Tucnacek
  • Upvote 2

Share this post


Link to post
Share on other sites

Něco jako tadyto?

 

player->ModifyMoney(-penize_v_copperech);

Děkuji dobrá duše. :)

 

 

 

Share this post


Link to post
Share on other sites

!BUMP!

 

přidána upravená verze vip npcčka, je to zatím alfa(netestováno), ale až budu mít chvilku určitě to otestuju a dodám případné opravy/úpravy

 

Co je nového?

Na začátku scriptu je nastavení cen úprav. Nastavuje se zvlášť u každé úpravy

A jak to funguje?

- TOKEN - token, který se používa ke "placení" (id itemu)-> společný pro všechny akce

- method - metoda(0 pomocí peněz, 1 pomocí tokenů)

- numtok - počet tokenů kterým hráč zaplaí

- numcooper - počet cooperů, kolik hráč musí zaplatit

 

Verze 1.1 alfa

 

 

#include "ScriptPCH.h"

//VIP NPC, coded by minig

//method 0 - hráči platí v cooperech
//method 1 - hráči platí v itemech(tokenech)
//method se nastavuje u všeho zvlášť

// *_numtok - počet tokenů k zaplacení
// *_numcooper - počet cooperů k nastavení

//id itemu, kterým se platí(token...)
#define TOKEN 12345

//rename config
#define rename_method 1
#define rename_numtok 1
#define rename_numcooper 1

//Factionchange config
#define faction_method 1
#define faction_numtok 1
#define faction_numcooper 1

//RaceChange Config
#define race_method 1
#define race_numtok 1
#define race_numcooper 1

//Customize Config
#define cust_method 1
#define cust_numtok 1
#define cust_numcooper 1

//Teleport Config
#define tele_method 1
#define tele_numtok 1
#define tele_numcooper 1

//typy změn
#define RENAME 1
#define FACTIONCHANGE 2
#define RACECHANGE 3
#define CUSTOMIZE 4
#define TELEPORT 6

static char moneyerr[18] = "Nedostatek penez!";
static char tokenerr[19] = "Nedostatek tokenu!";

bool paytok(int num, Player * player)
{
 if(!player->HasItemCount(TOKEN, num, false ))
  return false;
 else
    player->DestroyItemCount(TOKEN, num, true, false);
 return true;
}

bool paymoney(int num, Player * player)
{
 if(!player->GetMoney >= num)
   return false;
 else
  player->ModifyMoney(-num);
 return true;
}

bool pay(short type, Player * player)
{
 switch(type)
 {
 case RENAME:
  switch(rename_method)
  {
  case 0:
   if(paymoney(rename_numcooper, player))
     return true;
   else
     return false;
   break;
  case 1:
   if(paytok(rename_numtok, player))
     return true;
   else
     return false;
   break
  }
 case FACTIONCHANGE:
  switch(faction_method)
  {
  case 0:
   if(paymoney(faction_numcooper, player))
     return true;
   break;
  case 1:
   if(paytok(faction_numtok, player))
     return true;
   break;
  }
 case RACECHANGE:
  switch(race_method)
  {
  case 0:
   if(paymoney(race_numcooper, player))
     return true;
   break;
  case 1:
   if(paytok(race_numtok, player))
     return true;
   break;
  }
 case CUSTOMIZE:
  switch(cust_method)
  {
  case 0:
   if(paymoney(cust_numcooper, player))
     return true;
   break;
  case 1:
   if(paytok(cust_numtok, player))
     return true;
   break;
  }
 case TELEPORT;
  switch(tele_method)
  {
  case 0:
   if(paymoney(tele_numcooper, player))
     return true;
   break;
  case 1:
   if(paytok(tele_numtok, player))
     return true;
   break;
  }
}
 return false;
}

void tele_error()
{
switch(tele_method)
{
 case 0:
  npc->MonsterWhisper(moneyerr, player->GetGUID());
  break;
 case 1:
  npc->MonsterWhisper(tokenerr, player->GetGUID());
  break;
}
}

class vip_npc : public CreatureScript
{
public:
 vip_npc() : CreatureScript("vip_npc") {}
 bool OnGossipHello(Player *player, Creature *npc);
 bool OnGossipSelect(Player *player, Creature *npc, uint32 sender, uint32 uiAction);
};


bool vip_npc::OnGossipHello(Player *player, Creature *npc)
{
if (player->isInCombat())
       {
           player->CLOSE_GOSSIP_MENU();
           npc->MonsterWhisper("Jsi v combatu!", player->GetGUID());
           return true;
       }
       else
       {
           player->ADD_GOSSIP_ITEM( 6, "Rename", GOSSIP_SENDER_MAIN, 1);
           player->ADD_GOSSIP_ITEM( 6, "Zmena vzhledu", GOSSIP_SENDER_MAIN, 2);
           player->ADD_GOSSIP_ITEM( 6, "Zmena rasy", GOSSIP_SENDER_MAIN, 3);
           player->ADD_GOSSIP_ITEM( 6, "Zmena frakce", GOSSIP_SENDER_MAIN, 4);
           player->ADD_GOSSIP_ITEM( 2, "Teleport", GOSSIP_SENDER_MAIN, 6);
       }

       player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, npc->GetGUID());         
       return true;

}

bool vip_npc::OnGossipSelect(Player *player, Creature *npc, uint32 sender, uint32 uiAction)
{
switch(uiAction)
           {
        case 1: //Rename 
         if(pay(RENAME, player))
         {
          player->CLOSE_GOSSIP_MENU();
          player->SetAtLoginFlag(AT_LOGIN_RENAME);
          npc->MonsterWhisper("Nove jmeno si nastavis po relogu", player->GetGUID());
         }
         else
         {
           player->CLOSE_GOSSIP_MENU();
           switch(rename_method)
           {
            case 0:
             npc->MonsterWhisper(moneyerr, player->GetGUID());
             break;
            case 1:
             npc->MonsterWhisper(tokenerr, player->GetGUID());
             break;                                  
           }
         }
         break;

        case 2: //Customize
         if(pay(CUSTOMIZE, player))
         {
          player->CLOSE_GOSSIP_MENU();
          player->SetAtLoginFlag(AT_LOGIN_CUSTOMIZE);
          npc->MonsterWhisper("Novy vzhled si nastavis pri relogu.", player->GetGUID());
         }
         else
         {
           player->CLOSE_GOSSIP_MENU();
           switch(cust_method)
           {
            case 0:
             npc->MonsterWhisper(moneyerr, player->GetGUID());
             break;
            case 1:
             npc->MonsterWhisper(tokenerr, player->GetGUID()); 
             break;                                 
           }
         }
         break;

      case 3: //Race Change
       if(pay(RACECHANGE, player))
       {
        player->CLOSE_GOSSIP_MENU();
        player->SetAtLoginFlag(AT_LOGIN_CHANGE_RACE);
        npc->MonsterWhisper("Novou rasu si zvolis pri relogu.", player->GetGUID());
       }
       else
       {
        player->CLOSE_GOSSIP_MENU();
        switch(race_method)
        {
        case 0:
          npc->MonsterWhisper(moneyerr, player->GetGUID());
          break;
        case 1:
         npc->MonsterWhisper(tokenerr, player->GetGUID());
         break;                                  
        }
       }
       break;

      case 4: //Faction Change
       if(pay(FACTIONCHANGE, player))
       {
       player->CLOSE_GOSSIP_MENU();
       player->SetAtLoginFlag(AT_LOGIN_CHANGE_FACTION);
       npc->MonsterWhisper("Novou rasu u druhe frakce si zvolis pri relogu", player->GetGUID());
       }
       else
       {
       player->CLOSE_GOSSIP_MENU();
       switch(faction_method)
       {
       case 0:
        npc->MonsterWhisper(moneyerr, player->GetGUID());
        break;
       case 1:
        npc->MonsterWhisper(tokenerr, player->GetGUID());
        break;
       }
       }                               
      break;

		case 6: //Teleport
			if (player->GetTeam() == HORDE ) //Hordská města
			{
				player->ADD_GOSSIP_ITEM(2, "Orgrimmar", GOSSIP_SENDER_MAIN, 7);
				player->ADD_GOSSIP_ITEM(2, "Thunder Bluff", GOSSIP_SENDER_MAIN, 8);
				player->ADD_GOSSIP_ITEM(2, "Silvermoon City", GOSSIP_SENDER_MAIN, 9);
				player->ADD_GOSSIP_ITEM(2, "Undercity", GOSSIP_SENDER_MAIN, 10);
			}

			else //Alianční města
			{
				player->ADD_GOSSIP_ITEM(2, "Stormwind City", GOSSIP_SENDER_MAIN, 11);
				player->ADD_GOSSIP_ITEM(2, "Ironforge", GOSSIP_SENDER_MAIN, 12);
				player->ADD_GOSSIP_ITEM(2, "The Exodar", GOSSIP_SENDER_MAIN, 13);
				player->ADD_GOSSIP_ITEM(2, "Darnassus", GOSSIP_SENDER_MAIN, 14);
			}
			if(player->getLevel() >= 58) //Do Outlandu od levelu 58
				player->ADD_GOSSIP_ITEM(2, "Shattrath City", GOSSIP_SENDER_MAIN, 15);
			if(player->getLevel() >= 68) //Do Northrendu od levelu 68
				player->ADD_GOSSIP_ITEM(2, "Dalaran", GOSSIP_SENDER_MAIN, 16);
			player->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE, npc->GetGUID());
			break;
		case 7: //Orgrimmar
		  player->CLOSE_GOSSIP_MENU();
		 if(pay(TELEPORT, player))
			player->TeleportTo(1, 1483.25f, -4416.525f, 25.003f, 0);
		 else
                               tele_error();
                        break;
		case 8: //Thunder Bluff
			player->CLOSE_GOSSIP_MENU();
			if(pay(TELEPORT, player))
			 player->TeleportTo(1, -1197.3f, 30 , 177f, 1.589f);
			else
			 tele_error;
			break;
		case 9: //Silvermoon City
			player->CLOSE_GOSSIP_MENU();
			if(pay(TELEPORT, player))
			 player->TeleportTo(530f, 9530.775f, -7300.459f, 15.24f, 3.139f);
			else
			 tele_error();
			break;
		case 10: //Undercity
			player->CLOSE_GOSSIP_MENU();
			if(pay(TELEPORT, player))
			 player->TeleportTo(0, 1560.7f, 240.45f, -43.1045f, 0.01f);
			else
			 tele_error();
			break;
		case 11: //Stormwind City
			player->CLOSE_GOSSIP_MENU();
			if(pay(TELEPORT, player))
			 player->TeleportTo(0, -8800.41f, 622.355f, 96.8f, 2.255f);
			else
			 tele_error();
			break;
		case 12: //Ironforge
			player->CLOSE_GOSSIP_MENU();
			if(pay(TELEPORT, player))
			 player->TeleportTo(0, -4918.880f, -940.406f, 501.57f, 5.42f);
			else
			 tele_error();
			break;
		case 13: //The Exodar
			player->CLOSE_GOSSIP_MENU();
			if(pay(TELEPORT, player))
			 player->TeleportTo(530 , -4016.944f, -11675.455f, -134.932f , 0);
			else
			 tele_error();
			break;
		case 14: //Darnassus
			player->CLOSE_GOSSIP_MENU();
			if(pay(TELEPORT, player))
			 player->TeleportTo(1, 9951.804f, 2280.401f, 1341.394f, 1.425f);
			else
			 tele_error();
			break;
		case 15: //Shattrath City
			player->CLOSE_GOSSIP_MENU();
			if(pay(TELEPORT, player))
			 player->TeleportTo(530, -1837.538f, 5378.270f, -12.427f, 1.941f);
			else
			 tele_error();
			break;
		case 16: //Dalaran
			player->CLOSE_GOSSIP_MENU();
			if(pay(TELEPORT, player))
			 player->TeleportTo(571, 5848.875f, 602.287f, 651.142f, 2.448f);
			else
			 tele_error();
			break;
                     }

};

void AddScVIP()
{
new vip_npc();
}

 

 

Edited by minig
  • Upvote 2

Share this post


Link to post
Share on other sites

Nekolik pripominek:

  • Misto #define muzes pouzit datovy typ enum na nektere spolecne veci (typy zmen, jednotlive konfigurace)
  • Vzhledem k tomu, ze nejde platit zaroven tokeny i penezi, tak jsou *_numtok a *_numcooper zbytecny - staci ti *_num
  • Pripadne podle gmlevelu pridat overeni, jestli se jedna o VIP

Drobnosti:

  • U teleportu muzes dat moznost Zpet do hlavniho menu
  • Ty chybove hlasky se daji taky udelat jako #define, kdyz uz
  • Stacila by ti 1 fce na placeni (napr doPay(payMethod, num, player)) misto paymoney a paytok
  • Pise se copper, ne cooper

 

Jinak to ujde, dam ti +1 :).

  • Upvote 1

Share this post


Link to post
Share on other sites

díky za připomínky, ještě to poupravím... v C++ nejsem žádná extra třída, učím se právě tím že píšu takéto blbůstky :)

Edited by minig

Share this post


Link to post
Share on other sites

Ještě bych ti doporučil se zaměřit na styl, aby se v tom i druzí lehce vyznali.

Share this post


Link to post
Share on other sites

pěkný :P jenom mi vysvětlete proč tady tomu všichni říkáte scriptovat :D trinity má snad nějaký scriptový interpreter pro cěčko? všechno se to kompiluje proč nepoužijete správný výrazy

Edited by kamtar

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


×