Пример #1
0
    static bool HandleGameObjectSetScaleCommand(ChatHandler* handler, char const* args)
    {
        // number or [name] Shift-click form |color|Hgameobject:go_id|h[name]|h|r
        char* id = handler->extractKeyFromLink((char*)args, "Hgameobject");
        if (!id)
            return false;

        uint32 guidLow = atoi(id);
        if (!guidLow)
            return false;

        GameObject* object = NULL;

        if (GameObjectData const* gameObjectData = sObjectMgr->GetGOData(guidLow))
            object = handler->GetObjectGlobalyWithGuidOrNearWithDbGuid(guidLow, gameObjectData->id);

        if (!object)
        {
            handler->PSendSysMessage(LANG_COMMAND_OBJNOTFOUND, guidLow);
            handler->SetSentErrorMessage(true);
            return false;
        }

        char* scale_temp = strtok(NULL, " ");
        if (!scale_temp)
        {
            handler->SendSysMessage(LANG_BAD_VALUE);
            handler->SetSentErrorMessage(true);
            return false;
        }

        float scale = atof(scale_temp);

        if (scale <= 0.0f)
        {
            scale = object->GetGOInfo()->size;
            const_cast<GameObjectData*>(object->GetGOData())->size = -1.0f;
        }
        else
        {
            const_cast<GameObjectData*>(object->GetGOData())->size = scale;
        }

        object->SetObjectScale(scale);
        object->DestroyForNearbyPlayers();
        object->UpdateObjectVisibility();
        object->SaveToDB();

        handler->PSendSysMessage("Set %s scale to %f", object->GetGUID().ToString(), scale);
        return true;
    }
Пример #2
0
    bool OnGossipSelect(Player* player, Creature* creature, uint32, uint32 uiAction)
    {
        player->PlayerTalkClass->ClearMenus(); //DATABASE_SLOT_OFFSET
        if(player->playerhouse && PlayerHousingMgr.GetCurrentHouseArea(player))
        {
            if(player->house == player->playerhouse->GetPhase() && PlayerHousingMgr.GetCurrentHouseArea(player)->id == player->playerhouse->houseTemplate->id)
            {
                if(uiAction == GOSSIP_ACTION_INFO_DEF)
                {
                    MainMenu(player, creature);
                }
                else if(uiAction == GOSSIP_ACTION_INFO_DEF + 1) // Delete go or creature?
                {
                    player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TALK, "Back to menu", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
                    GameObject *object = player->playerhouse->GetNearestObject(player, creature);
                    if(object)
                    {
                        std::string name = "Remove object: " + PlayerHousingMgr.GetVendorItem((int)object->GetGOData()->id, false)->desc;
                        player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, name, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+5); // REMOVE OBJECT
                    }
                    else
                        player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "No object near", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);

                    Creature *creature2 = player->playerhouse->GetNearestCreature(player, creature);
                    if(creature2)
                    {
                        std::string name = "Remove npc: " + PlayerHousingMgr.GetVendorItem((int)creature2->GetCreatureData()->id * (-1), false)->desc;
                        player->ADD_GOSSIP_ITEM(GOSSIP_ICON_INTERACT_1, name, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+6); // REMOVE NPC
                    }
                    else
                        player->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, "No npc near", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1);
                    player->PlayerTalkClass->SendGossipMenu(907, creature->GetGUID());
                }
                else if(uiAction == GOSSIP_ACTION_INFO_DEF + 2)
                {
                    player->pagehelper = 0;
                    player->categoryhelper = 2;
                    SelectNpcGo(player, creature);
                }
                else if(uiAction == GOSSIP_ACTION_INFO_DEF + 3)
                {
                    player->pagehelper--;
                    if(player->categoryhelper == 2)
                        SelectNpcGo(player, creature);
                    else if(player->categoryhelper == 8)
                        Guests(player, creature);
                }
                else if(uiAction == GOSSIP_ACTION_INFO_DEF + 4)
                {
                    player->pagehelper++;
                    if(player->categoryhelper == 2)
                        SelectNpcGo(player, creature);
                    else if(player->categoryhelper == 8)
                        Guests(player, creature);
                }
                else if(uiAction == GOSSIP_ACTION_INFO_DEF + 5) // delete go
                {
                    PlayerHousingMgr.RemoveGameObject(player, player->playerhouse->GetNearestObject(player, creature));
                    MainMenu(player, creature);
                }
                else if(uiAction == GOSSIP_ACTION_INFO_DEF + 6) // delete npc
                {
                    PlayerHousingMgr.RemoveCreature(player, player->playerhouse->GetNearestCreature(player, creature));
                    MainMenu(player, creature);
                }
                else if(uiAction == GOSSIP_ACTION_INFO_DEF + 7) // Base loc
                {
                    player->TeleportTo(player->playerhouse->houseTemplate->map, player->playerhouse->houseTemplate->x, player->playerhouse->houseTemplate->y,
                                       player->playerhouse->houseTemplate->z, player->playerhouse->houseTemplate->o);
                }
                else if(uiAction == GOSSIP_ACTION_INFO_DEF + 8) // who can enter
                {
                    player->pagehelper = 0;
                    player->categoryhelper = 8;

                    Guests(player, creature);
                }
                else if(uiAction == GOSSIP_ACTION_INFO_DEF + 9) // delete house
                {
                    player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TALK, "No, I changed my mind", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF);
                    player->ADD_GOSSIP_ITEM(GOSSIP_ICON_TALK, "Yes, i'd like to delete this house", GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+10);
                }
                else if(uiAction == GOSSIP_ACTION_INFO_DEF + 10) // delete house finish
                {
                    player->playerhouse->PackHouse(player);
                }
                else if(uiAction == GOSSIP_ACTION_INFO_DEF + 11) // leave house
                {
                    PlayerHousingMgr.LeaveHouse(player);
                }
                else if(uiAction == GOSSIP_ACTION_INFO_DEF + 12) // house acessories
                {
                    player->currentVendorEntry = -1;
                    player->GetSession()->SendListInventory(creature->GetGUID());
                }
                else if(uiAction > GOSSIP_ACTION_INFO_DEF + OFFSET_ADD_SOMETHING)
                {
                    if(player->categoryhelper == 2)
                    {
                        HouseItemList::iterator j;
                        uint32 id = uiAction - GOSSIP_ACTION_INFO_DEF - OFFSET_ADD_SOMETHING;
                        HouseItem *result = NULL;
                        int x = 0;
                        for (j = player->playerhouse->houseItemList.begin(); j != player->playerhouse->houseItemList.end(); ++j)
                        {
                            HouseItem *item = *j;
                            if(item->id == id)
                            {
                                result = item;
                            }

                            if(item->spawned)
                                x++;
                        }
                        if(result)
                        {
                            if(x < SOFT_LIMIT)
                            {
                                if(result->entry < 0)
                                    PlayerHousingMgr.SpawnCreature(player, result->entry);
                                else
                                    PlayerHousingMgr.SpawnGameObject(player, result->entry);
                                player->pagehelper = 0;
                            }
                            SelectNpcGo(player, creature);
                        }
                    }
                    else if(player->categoryhelper == 8)
                    {
                        if(uiAction - GOSSIP_ACTION_INFO_DEF - OFFSET_ADD_SOMETHING != player->GetGUIDLow())
                        {
                            PlayerHousingMgr.GuestChange(player, uiAction - GOSSIP_ACTION_INFO_DEF - OFFSET_ADD_SOMETHING, false);
                        }
                        player->pagehelper = 0;
                        Guests(player, creature);
                    }
                }
            }
        }
        if(uiAction != GOSSIP_ACTION_INFO_DEF + 12)
            player->PlayerTalkClass->SendGossipMenu(907, creature->GetGUID());
        return true;
    }