Teleporter npc script[Frissítve,tutorial]

Indította zack01, 2011 augusztus 31, 01:17:40 DÉLUTÁN

Előző téma - Következő téma

zack01

Update
Mivel ez a teleporter már vagy 20000000 éves, ezért inkább leírom hogyan készíthetsz magadnak egyet a legfrissebb revekhez...

1. lépés
include-olni kell a scriptpc.h- ba

#include "ScriptPCH.h"
2.
Most jön az a rész, amit én úgy szoktam nevezni hogy a script "felvezetése" ;D

class tele : public CreatureScript
{
   public:

       (teleporterneve)()
           : CreatureScript("(teleporterneve)")
       {
       }

Ezután adunk neki pointert( én úgy vettem észre hogy a revek közti fejlesztéssel ezekre kell inkább figyelni mer ez változik..)
bool OnGossipHello(Player* Plr, Creature* pCrea)
{ //<- ez a zárójel fontos, ne felejtsük el bezárni

3. Most jön az a rész, ami a te ízlésedre van szabva hogyan nézzen ki
A sorokat amiket megadunk, azokat fogja beadni a palyernek. Ezeket kedved szerint módosíthatod, én úgy csinálom most meg, hogy minél több féle képen tudd használni(előre bocsánat, de kicsit kacifántos lett  ;D )
if (player->GetTeam() == ALLIANCE) //ha a player allis
        {

                if (player->GetSession()->GetSecurity() >= 1) //ha a player allis, és gm

                    {
                         player->ADD_GOSSIP_ITEM( 4, "hely", GOSSIP_SENDER_MAIN, 1000); //a zárójelen bellül a 4es szám az ikon id-je,
                     player->ADD_GOSSIP_ITEM( 4, "hely", GOSSIP_SENDER_MAIN, 1001); // a hely felirat pedig az lesz amit kihoz a gossip neve ként,
                     player->ADD_GOSSIP_ITEM( 4, "hely", GOSSIP_SENDER_MAIN, 1002); // innen még a case a fontos, ami mindig legyenk különböző,kivéve ha ugyanoda visz a 2 hely
                    }
else // ha allis, de nem gm
{
         
                        if(Plr->getClass()==3) // ha a palyer hunter és allis, de nem gm
{
player->ADD_GOSSIP_ITEM( 4, "hely", GOSSIP_SENDER_MAIN, 1000);
                                          player->ADD_GOSSIP_ITEM( 4, "hely", GOSSIP_SENDER_MAIN, 1002);
}
else //ha a player csak allis
{
player->ADD_GOSSIP_ITEM( 4, "hely", GOSSIP_SENDER_MAIN, 1000);
}
}
}
else // ha hordás


                if (player->GetSession()->GetSecurity() >= 1) //ha a player hordás, és gm

                    {
                         player->ADD_GOSSIP_ITEM( 4, "hely", GOSSIP_SENDER_MAIN, 1000); //a zárójelen bellül a 4es szám az ikon id-je,
                     player->ADD_GOSSIP_ITEM( 4, "hely", GOSSIP_SENDER_MAIN, 1001); // a hely felirat pedig az lesz amit kihoz a gossip neve ként,
                     player->ADD_GOSSIP_ITEM( 4, "hely", GOSSIP_SENDER_MAIN, 1002); // innen még a case a fontos, ami mindig legyenk különböző,kivéve ha ugyanoda visz a 2 hely
                    }
else // ha hordás, de nem gm
{
         
                        if(Plr->getClass()==3) // ha a palyer hunter és hordás, de nem gm
{
player->ADD_GOSSIP_ITEM( 4, "hely", GOSSIP_SENDER_MAIN, 1001);
                                          player->ADD_GOSSIP_ITEM( 4, "hely", GOSSIP_SENDER_MAIN, 1002);
}
else //ha a player csak hordás
{
player->ADD_GOSSIP_ITEM( 4, "hely", GOSSIP_SENDER_MAIN, 1001);
}
}
Plr->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE,pCrea->GetGUID());
return true;
}


4. lépés
egy újabb pointer,
bool OnGossipSelect(Player* Plr, Creature* pCrea, uint32 /*uiSender*/, uint32 action)
ez alá felirjuk ezt ;D
if (Plr->isInCombat())
{
Plr->CLOSE_GOSSIP_MENU();
pCrea->MonsterSay("Combatban nem teleportalok!", LANG_UNIVERSAL, NULL);
return false;
}

Ez azt jelzi hogy combatban nem teléz.. ( úgyis meg lehet oldani, hogy ezt a feltételt felülre írjuk, és akkor már meg se nyitja a gossip menüket)
ezután meg adjuk a case-k jelentését...

switch(action)

{
case 1000:
Plr->CLOSE_GOSSIP_MENU(); //ez nagyon fontos, azt jelenti hogy ha rákattint a palyer automatikusan bezárodjon az ablak
Plr->TeleportTo(0, -8860.19f, -1614.53f, 261.823f, 0.0118973f); // ez a kordináta
//Plr->TeleportTo(MAP ID, X+f, Y+f, Z+f, O+f)

break;

case 1001:
Plr->CLOSE_GOSSIP_MENU();
Plr->TeleportTo(571, 5777.71f, 607.277f, 609.886f, 0.980273f);

break;

case 1002:
Plr->CLOSE_GOSSIP_MENU();
Plr->TeleportTo(0, -3761.4f, 1130.32f, 131.957f, 4.7164f);

break;


5. a befejezés:

void AddSC_(teleprotneve)()
{
new (teleprotneve)();
}


kompletten valahogy így nézne ki..

#include "ScriptPCH.h"

class tele : public CreatureScript
{
   public:

       (teleporterneve)()
           : CreatureScript("(teleporterneve)")
       {
       }

bool OnGossipHello(Player* Plr, Creature* pCrea)
{


if (player->GetTeam() == ALLIANCE) //ha a player allis
        {

                if (player->GetSession()->GetSecurity() >= 1) //ha a player allis, és gm

                    {
                         player->ADD_GOSSIP_ITEM( 4, "hely", GOSSIP_SENDER_MAIN, 1000); //a zárójelen bellül a 4es szám az ikon id-je,
                     player->ADD_GOSSIP_ITEM( 4, "hely", GOSSIP_SENDER_MAIN, 1001); // a hely felirat pedig az lesz amit kihoz a gossip neve ként,
                     player->ADD_GOSSIP_ITEM( 4, "hely", GOSSIP_SENDER_MAIN, 1002); // innen még a case a fontos, ami mindig legyenk különböző,kivéve ha ugyanoda visz a 2 hely
                    }
else // ha allis, de nem gm
{
         
                        if(Plr->getClass()==3) // ha a palyer hunter és allis, de nem gm
{
player->ADD_GOSSIP_ITEM( 4, "hely", GOSSIP_SENDER_MAIN, 1000);
                                          player->ADD_GOSSIP_ITEM( 4, "hely", GOSSIP_SENDER_MAIN, 1002);
}
else //ha a player csak allis
{
player->ADD_GOSSIP_ITEM( 4, "hely", GOSSIP_SENDER_MAIN, 1000);
}
}
}
else // ha hordás


                if (player->GetSession()->GetSecurity() >= 1) //ha a player hordás, és gm

                    {
                         player->ADD_GOSSIP_ITEM( 4, "hely", GOSSIP_SENDER_MAIN, 1000); //a zárójelen bellül a 4es szám az ikon id-je,
                     player->ADD_GOSSIP_ITEM( 4, "hely", GOSSIP_SENDER_MAIN, 1001); // a hely felirat pedig az lesz amit kihoz a gossip neve ként,
                     player->ADD_GOSSIP_ITEM( 4, "hely", GOSSIP_SENDER_MAIN, 1002); // innen még a case a fontos, ami mindig legyenk különböző,kivéve ha ugyanoda visz a 2 hely
                    }
else // ha hordás, de nem gm
{
         
                        if(Plr->getClass()==3) // ha a palyer hunter és hordás, de nem gm
{
player->ADD_GOSSIP_ITEM( 4, "hely", GOSSIP_SENDER_MAIN, 1001);
                                          player->ADD_GOSSIP_ITEM( 4, "hely", GOSSIP_SENDER_MAIN, 1002);
}
else //ha a player csak hordás
{
player->ADD_GOSSIP_ITEM( 4, "hely", GOSSIP_SENDER_MAIN, 1001);
}
}
Plr->SEND_GOSSIP_MENU(DEFAULT_GOSSIP_MESSAGE,pCrea->GetGUID());
return true;
}

bool OnGossipSelect(Player* Plr, Creature* pCrea, uint32 /*uiSender*/, uint32 action)
{
if (Plr->isInCombat())
{
Plr->CLOSE_GOSSIP_MENU();
pCrea->MonsterSay("Combatban nem teleportalok!", LANG_UNIVERSAL, NULL);
return false;
}

switch(action)

{
case 1000:
Plr->CLOSE_GOSSIP_MENU(); //ez nagyon fontos, azt jelenti hogy ha rákattint a palyer automatikusan bezárodjon az ablak
Plr->TeleportTo(0, -8860.19f, -1614.53f, 261.823f, 0.0118973f); // ez a kordináta
//Plr->TeleportTo(MAP ID, X+f, Y+f, Z+f, O+f)

break;

case 1001:
Plr->CLOSE_GOSSIP_MENU();
Plr->TeleportTo(571, 5777.71f, 607.277f, 609.886f, 0.980273f);

break;

case 1002:
Plr->CLOSE_GOSSIP_MENU();
Plr->TeleportTo(0, -3761.4f, 1130.32f, 131.957f, 4.7164f);

break;
}

};

void AddSC_(teleprotneve)()
{
new (teleprotneve)();
}


A forgatás művelete, nos azzal meg tele van a fórum :D:D:D ;D ;D


ez komolyan teljesen meg!

$0undX

Remek, új vagy a fórumom de már is postolsz, sokaknak biztos hasznos lesz :)

zack01

ez komolyan teljesen meg!

Powered by EzPortal