Главная | Форум | Статьи | Фaйлы| Картинки WoW | Профиль | Регистрация | Вход

[ Новые сообщения · Правила форума · Поиск · RSS ]

WoW-Info — информационный World of Warcraft портал

Скрипт на Гильд хаусы + SQL Query - Форум

  • Сторінка 1 з 1
  • 1
Скрипт на Гильд хаусы + SQL Query
MaydieДата: Вівторок, 30.11.2010, 00:34 | Сообщение # 1



Maydie
Капрал
Группа: Пользователи
Сообщений: 70

Замечания:

Оффлайн
Версия 2.0
Работает на Aspire Hearthstone.

Описание автора

Quote
What it does:
Guild Houses
Will query the Guild ID of player and cross check with entries in the character database (house table posted below)
checks if players guild owns an area
checks if player has enough gold
if no gold no port to house
enters in coords based on players gps location (i have some future plans for this - change to actual coords instead of gps function if you want to limit locations)
Ports to guild house cost 100 gold (1000 * 1000 = 100 gold)
Q_RESULTS_1 and Q_RESULTS_2 now check to see if Guilds own a Zone
Q_RESULTS_G_LEADER now checks guild_data table in character DB for guildid, guid, and guildrank
if all 3 are proper, Only Guild Masters can purchase
Guilds can now purchase multiple zones
If a zone is already owned - you cannot purchase
Now checks correctly in various ways if you are -
level 10
in a guild
Guild Master
what Zone
Guild ID
Player GUID
In Combat

Now teleports you to nearest Housing Area if in a Zone that
Your Guild Controls - If not in a Guild Controlled Zone you cannot port there
-- Next Stop
On Owned Zone Entry - If players own a Zone there will be
an announcement to players if they own / if its available
and what options are allowed

Everybody say yay for ownable zones

G_House.CPP

Code
* I will not tolerate Leechers and / or code stealers   
    * So for the sake of Open Source, give Credits please.   
    * Cheers <img src="http://s8.ucoz.net/sm/1/smile.gif" border="0" align="absmiddle" alt="smile">   
    */   

#include "StdAfx.h"   
#include "Setup.h"   

#ifdef WIN32   
#pragma warning(disable:4305)   
#pragma warning(disable:4101)   

#endif   

#define HOUSE_MANAGER 40014//< Duh, NPC ID >   
#define REQ_COIN 1000 * 1000//< 1000 * 1000 = 100 Gold    
#define GUILD_MASTER_RANK 0   

class SCRIPT_DECL H_MANAGER : public GossipScript   
{   
public:   
    void GossipHello(ObjectPointer Ob, PlayerPointer Plr, bool AutoSend);   
    void GossipSelectOption(ObjectPointer Ob, PlayerPointer Plr, uint32 Id, uint32 IntId, const char * Code);   
    void GossipEnd(ObjectPointer Ob, PlayerPointer Plr);   
    void Destroy()   
    {   
    delete this;   
    }   
};   
       
void H_MANAGER::GossipHello(ObjectPointer Ob, PlayerPointer Plr, bool AutoSend)   
    {   
    GossipMenu * Menu;   
    objmgr.CreateGossipMenuForPlayer(&Menu, Ob->GetGUID(), 1, Plr);   
       
    if(   
    Plr->CombatStatus.IsInCombat())   
    {   
    Plr->BroadcastMessage("You are in Combat!");   
    return;   
    }   
    if(   
    Plr->GetGuildId() == NULL)   
    {   
    Plr->BroadcastMessage("You are not in a Guild!");   
    return;   
    }   
    if(   
    Plr->getLevel() < 10)   
    {    
    Plr->BroadcastMessage("You must be level 10.");   
    }else{   
     Menu->AddItem(1, "Buy this Area.", 1);   
     Menu->AddItem(2, "Port me to the nearest Guild Area.", 2);   
     Menu->AddItem(3, "Area Options", 3);   
    }   
    if(AutoSend)   
     Menu->SendTo(Plr);   
    }   
void H_MANAGER::GossipSelectOption(ObjectPointer Ob, PlayerPointer Plr, uint32 Id, uint32 IntId, const char * Code)   
    {   
    CreaturePointer    pCreature = (Ob->GetTypeId()==TYPEID_UNIT) ?TO_CREATURE(Ob):NULLCREATURE;   

    uint32 PLR_COIN = Plr->GetUInt32Value(PLAYER_FIELD_COINAGE);   
       
    if(pCreature==NULLCREATURE)   
     return;   
    GossipMenu * Menu;   
     switch(IntId)   
    {   
    case 0:   
    GossipHello(Ob, Plr, true);   
     break;   

       
//CASE ONE - BUYING THE HOUSE - DO YOU HAVE THE PRE-REQUISITES FILLED OUT?   
    case 1:   
    {   
     //    SQL HACK CHECK TO SEE IF YOU ARE A GUILD MASTER UNTIL I FIGURE OUT HOW   
     //    TO CALL FUNCTION GETGUILDLEADER PROPERLY   
    QueryResult * Q_RESULTS_G_LEADER = CharacterDatabase.Query("SELECT * FROM guild_data WHERE guildid = %u AND playerid = %u AND guildRank = %u", Plr->GetGuildId(), Plr->GetGUID(), GUILD_MASTER_RANK);   
    if(Q_RESULTS_G_LEADER == GUILD_MASTER_RANK)   
     {   
     Plr->BroadcastMessage("You are not the Guild Master.");   
     Plr->Gossip_Complete();   
    return;   
    }   
    QueryResult * Q_RESULTS_1 = CharacterDatabase.Query("SELECT * FROM House_system WHERE guild_id = %u AND zoneid = %u", Plr->GetGuildId(), Plr->GetZoneId());   
    if(Q_RESULTS_1 != NULL)   
    {    //ARE YOU SERIOUSLY TRYING TO BUY PROPERTY TWICE?   
     Plr->BroadcastMessage("This area has already been purchased.");   
     Plr->Gossip_Complete();   
    return;   
    }   
    if(PLR_COIN < (REQ_COIN))   
     //REMINDER FOR LATER - ADD IN OPTION TO TELE TO OTHER GUILDS   
     //OWNED HOUSE IF ON ZONE - EXTRA CHARGE APPLIES FOR NON OWNERS   

    {    //YOU NEED TO HAVE A SUBSTANTIAL BREAD FLOW OR THIS HAPPENS   
     Plr->BroadcastMessage("You don't have enough gold to Teleport to nearby Guilds Land.");   
     Plr->Gossip_Complete();   
    return;   
    }   
    if(Q_RESULTS_1 == NULL)   
    {    //MMMM, DATA INSERTION   
     //NOW GIVE ME MY MONEY!   
     CharacterDatabase.Execute("INSERT INTO House_system VALUES('%u', '%f', '%f', '%f', '%u', '%u')", Plr->GetGuildId(), Plr->GetPositionX(), Plr->GetPositionY(), Plr->GetPositionZ(), Plr->GetMapId(), Plr->GetZoneId());   
     Plr->SetUInt32Value(PLAYER_FIELD_COINAGE, (PLR_COIN - (REQ_COIN)));//GOLD REMOVAL   
     Plr->BroadcastMessage("Gratz! Your Guild now Owns this area.");    //PLAYER SEES THIS IN CHAT   
     Plr->Gossip_Complete();   
     }   
    }break;   

//CASE TWO - READ ALL THE FINE PRINT AND GET ACCESS   
    case 2:   
    {   
    QueryResult * Q_RESULTS_2 = CharacterDatabase.Query("SELECT * FROM House_system WHERE guild_id = %u AND zoneid = %u", Plr->GetGuildId(), Plr->GetZoneId());   
    if(Q_RESULTS_2 == NULL)   
    {    //EITHER YOU ARE TRYING TO OUTBUY SOMEONE ELSES HOUSE   
     //OR YOUR GUILD ALREADY OWNS A HOUSE   
     Plr->BroadcastMessage("Your Guild does not own any Land Nearby.");   
     Plr->Gossip_Complete();   
    return;   
    }   
    if(Q_RESULTS_2->GetRowCount() > 1)   
    {    //OH BEJESUS, ANOTHER MYSQL ERROR   
     //BTW - ERROR 421 = BETTER THEN SOBER   
     //AND YOU THOUGHT 4:20 WAS SO COOL   
     //BY THE TIME 4:21 ROLLS AROUND IM BETTER THEN SOBER   
     Plr->BroadcastMessage("Error 421 - Please Report this on the Forums - ");   
     Plr->Gossip_Complete();   
    return;   
    }   
    if(PLR_COIN < (REQ_COIN))   
    {    //ZOMG NO GOLD?   
     Plr->BroadcastMessage("You don't have enough gold to teleport to your house.");   
     Plr->Gossip_Complete();   
    return;   
    }   
     float x, y, z;   
     uint32 MapID;   
     Field * F_RESULT = Q_RESULTS_2->Fetch();   
     x = F_RESULT[1].GetFloat();   
     y = F_RESULT[2].GetFloat();   
     z = F_RESULT[3].GetFloat();   
     MapID = F_RESULT[4].GetUInt32();   
     Plr->EventTeleport(MapID, x, y, z);   
     Plr->Gossip_Complete();   
    }break;   

//CASE THREE - AVAILABLE HOUSE OPTIONS   
case 3:   
    {   
    objmgr.CreateGossipMenuForPlayer(&Menu, Ob->GetGUID(), 1, Plr);   
     Menu->AddItem(0, "This menu is under construction");   
     //WILL FINISH CREATURE SPAWNS AND OBJECT SPAWNS   
     //ONCE HOUSE LOCATIONS IN EACH ZONE ARE SET UP   
     //UNLESS I CAN FIGURE OUT A BETTER WAY   
     Menu->AddItem(1, "Purchase Repair Bot", 4);   
     Menu->AddItem(2, "Purchase Furniture", 5);   
     Menu->AddItem(3, "Purchase Armor Vendor", 6);   
     Menu->AddItem(4, "Purchase Weapon Vendor", 7);   
     Menu->AddItem(5, "Teleport List", 8);   
     Menu->SendTo(Plr);   
      }break;   
    //BEGINNING OF CASES   
//case OPEN:   
//    {   
//  Plr->FUNCTION(PARAMETERS);   
//      }break;   

    }   
};   
       
void H_MANAGER::GossipEnd(ObjectPointer Ob, PlayerPointer Plr)   
{   
    GossipScript::GossipEnd(Ob, Plr);   
}   
       
void SetupH_MANAGER(ScriptMgr * mgr)   
{   
    GossipScript * H_M = (GossipScript*) new H_MANAGER();   
    mgr->register_gossip_script(HOUSE_MANAGER, H_M);   
}

SETUP.CPP

Code
#include "StdAfx.h"   
#include "Setup.h"   
#define SKIP_ALLOCATOR_SHARING 1   
#include <ScriptSetup.h>   

extern "C" SCRIPT_DECL uint32 _exp_get_script_type()   
{   
           return SCRIPT_TYPE_MISC;   
}   

extern "C" SCRIPT_DECL void _exp_script_register(ScriptMgr* mgr)   
{   
    SetupH_MANAGER(mgr);   
}   

#ifdef WIN32   

BOOL APIENTRY DllMain( HANDLE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved )   
{   
       return TRUE;   
}   

#endif

SQL Таблица. Заливать в Character Database

Code
DROP TABLE IF EXISTS "house_system";   

CREATE TABLE "house_system" (   
     "guild_id" int(6) unsigned NOT NULL DEFAULT '0',   
     "posX" float NOT NULL DEFAULT '0',   
     "posY" float NOT NULL DEFAULT '0',   
     "posZ" float NOT NULL DEFAULT '0',   
     "mapId" int(10) unsigned NOT NULL DEFAULT '0',   
     "zoneid" int(10) unsigned NOT NULL COMMENT 'zone id',   
     PRIMARY KEY ("zoneid")   
);

GUILD HOUSE MANAGER

Code
INSERT INTO `creature_names` (`entry`, `name`, `subname`, `info_str`, `Flags1`, `type`, `family`, `rank`, `unk4`, `spelldataid`, `male_displayid`, `female_displayid`, `male_displayid2`, `female_displayid2`, `unknown_float1`, `unknown_float2`, `civilian`, `leader`) VALUES ('40014', 'Housing Manager', 'Guild House Manager', '', '1', '7', '0', '4', '0', '0', '22220', '0', '0', '0', '1.0', '1.0', '0', '1');   
INSERT INTO `creature_proto` (`entry`, `minlevel`, `maxlevel`, `faction`, `minhealth`, `maxhealth`, `mana`, `scale`, `npcflags`, `attacktime`, `attacktype`, `mindamage`, `maxdamage`, `rangedattacktime`, `rangedmindamage`, `rangedmaxdamage`, `item1`, `item2`, `item3`, `RespawnTime`, `resistance1`, `resistance2`, `resistance3`, `resistance4`, `resistance5`, `resistance6`, `resistance7`, `combat_reach`, `bounding_radius`, `auras`, `boss`, `money`, `invisibility_type`, `death_state`, `walk_speed`, `run_speed`, `fly_speed`, `extra_a9_flags`, `auraimmune_flag`, `vehicle_entry`, `CanMove`) VALUES ('40014', '80', '80', '35', '50000', '50000', '0', '1.0', '3', '3000', '0', '20000.0', '20000.0', '0', '0.0', '0.0', '0', '0', '0', '30000', '1', '1', '1', '1', '1', '1', '0', '0.0', '0.0', '0', '1', '0', '0', '0', '2.5', '8.0', '14.0', '0', '0', '-1', '7');


 
  • Сторінка 1 з 1
  • 1
Пошук:

Новые сообщения в темах
Сдам в аренду сервер и хостинг · (Хост Предложения)
Автор: redlaine
Последнее сообщение в 23:53
хаха :D · (Приколы)
Автор: [N1ke]Medved
Последнее сообщение в 18:40
Autobattle - новый боевой бот ... · (Боты для WoW)
Автор: terrikon
Последнее сообщение в 18:39
PvE руководство для Чернокнижн... · (Чернокнижник)
Автор: Darkensand
Последнее сообщение в 18:38
Пустой свиток (Часть 11) · (Истории WoW)
Автор: R_a_Z_o_R
Последнее сообщение в 18:37
Друиды в Катаклизме: Официальн... · (Друид)
Автор: Darkensand
Последнее сообщение в 18:37
[Баг 3.3.5] Фарм ледяных бадже... · (Читы для WoW)
Автор: Darkensand
Последнее сообщение в 18:35
FarmBot (Бот для фарма руды и ... · (Боты для WoW)
Автор: homma
Последнее сообщение в 18:34
Почему мы сражаемся: ролевая и... · (Воин)
Автор: Darkensand
Последнее сообщение в 18:34
Книги по Wold of Warcraft · (Истории WoW)
Автор: R_a_Z_o_R
Последнее сообщение в 18:33
Маг огня в Cataclysm · (Маг)
Автор: Darkensand
Последнее сообщение в 18:33
Как начать играть в World of W... · (Полезно знать)
Автор: Belkmondesh
Последнее сообщение в 18:32
Характеризация профессий · (Профессии)
Автор: Darkensand
Последнее сообщение в 18:31
Что значит для арканов бета те... · (Маг)
Автор: Darkensand
Последнее сообщение в 18:31

Контакты Контакты Copyright WoW-Info — World of Warcraft портал © 2026 | Условия и правила использования ресурса | Реклама / Услуги
WoW-Info портал.World of Warcraft портал — готовые сервера, сайты, картинки, аддоны, патчи, читы, баги, mangos, ArcEmu, TrinityCore, Warcraft 3, новости, Cataclysm...
Яндекс.Метрика Хостинг від uCoz