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; }
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; }