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
Remek, új vagy a fórumom de már is postolsz, sokaknak biztos hasznos lesz :)
:$