Tak už jsem to vyřešil metodou udělej si sám a funguje.
Script vypadá takto:
/*#####
# item_teleport
#####*/
extern DatabaseType WorldDatabase;
bool getGuildHouseCoords(uint32 guildId, float &x, float &y, float &z, uint32 &map)
{
if (guildId == 0)
{
//if player has no guild
return false;
}
QueryResult_AutoPtr result;
result = WorldDatabase.PQuery("SELECT `x`, `y`, `z`, `map` FROM `guildhouses` WHERE `guildId` = %u", guildId);
if(result)
{
Field *fields = result->Fetch();
x = fields[0].GetFloat();
y = fields[1].GetFloat();
z = fields[2].GetFloat();
map = fields[3].GetUInt32();
return true;
}
return false;
}
bool ItemUse_item_teleport(Player *pPlayer, Item *pItem, SpellCastTargets const &targets)
{
Map* pMap = pPlayer->GetMap();
if (pMap->IsBattleGroundOrArena())
{
//if player is in arena or battleground
return false;
}
if (pPlayer->GetGuildId() == 0)
{
//if player has no guild
return false;
}
if (!pPlayer->getAttackers().empty())
{
//if player in combat
return false;
}
float x, y, z;
uint32 map;
if (getGuildHouseCoords(pPlayer->GetGuildId(), x, y, z, map))
{
//teleport player to the specified location
pPlayer->TeleportTo(map, x, y, z, 0.0f);
}
else
return false;
}
void AddSC_item_scripts()
{
newscript = new Script;
newscript->Name = "item_teleport";
newscript->pItemUse = &ItemUse_item_teleport;
newscript->RegisterSelf();
}
INSERT INTO item_template (entry,class,name,displayid,Quality,Flags,ItemLevel,maxcount,spellid_1,spellcooldown_1,description,Material,ScriptName) VALUES (100000, 15, "Teleportacni svitek", 6418, 3, 64, 1, 1, 35517, 180000, "Tento svitek vas teleportuje do vaseho GH.", -1, "item_teleport");
Ale ještě potřebuju udělat, aby item, měl určitý cast time, protože teď to je jako instant, což není moc dobré, protože by se mohli teleportovat z arén, bg apod... Ví někdo, kde tohle nastavit?