//========================================================= // Reinicio //========================================================= void CInventoryPanel::Reset() { BackpackItems->RemoveAll(); BackpackItems->RemoveAllSections(); BackpackItems->AddSection(0, ""); BackpackItems->AddColumnToSection(0, "name", "#Inventory_Backpack", 0, 300); BackpackItems->AddColumnToSection(0, "count", "", 0, 100); PocketItems->RemoveAll(); PocketItems->RemoveAllSections(); PocketItems->AddSection(0, ""); PocketItems->AddColumnToSection(0, "name", "#Inventory_Pocket", 0, 300); PocketItems->AddColumnToSection(0, "count", "", 0, 100); BackpackProgress->SetProgress(0.0); InventoryProgress->SetProgress(0.0); }
//========================================================= // Bucle de ejecución de tareas. //========================================================= void CInventoryPanel::OnTick() { BaseClass::OnTick(); C_IN_Player *pPlayer = (C_IN_Player *)C_BasePlayer::GetLocalPlayer(); if ( !pPlayer ) { SetVisible(false); return; } if ( cl_update_inventory.GetBool() ) { // Obtenemos los limites del inventario. ConVarRef sv_max_inventory_backpack("sv_max_inventory_backpack"); ConVarRef sv_max_inventory_pocket("sv_max_inventory_pocket"); // Lo devolvemos a 0 cl_update_inventory.SetValue(0); // Removemos todos los objetos. BackpackItems->RemoveAll(); PocketItems->RemoveAll(); int pEntity; const char *pItemName; const char *pItemClassName; float pBackpackCountItems = 0; float pPocketCountItems = 0; int pBackpackItems[100]; int pPocketItems[100]; // Iniciamos los array for ( int i = 0; i < ARRAYSIZE(pBackpackItems); i++ ) pBackpackItems[i] = 0; for ( int i = 0; i < ARRAYSIZE(pPocketItems); i++ ) pPocketItems[i] = 0; // Mochila // Primero obtenemos todos los objetos y los agrupamos en array. for ( int i = 1; i < ARRAYSIZE(pBackpackItems); i++ ) { pEntity = pPlayer->Inventory_GetItem(i, INVENTORY_BACKPACK); // No hay nada en este Slot if ( pEntity == 0 ) continue; // Aquí vamos contando los objetos de este mismo tipo. // !!!NOTE: Todo esto fue desarrollado por alguien que no sabe mucho C++... Odio los array de C++... pBackpackItems[pEntity] = (pBackpackItems[pEntity] + 1); pBackpackCountItems++; } // Ahora obtenemos la lista de objetos con su respectiva cantidad y la mostramos. for ( int i = 1; i < ARRAYSIZE(pBackpackItems); i++ ) { // !!!NOTE: i ahora es la ID del objeto if ( pBackpackItems[i] == 0 || !pBackpackItems[i] ) continue; pItemName = pPlayer->Inventory_GetItemNameByID(i); pItemClassName = pPlayer->Inventory_GetItemClassNameByID(i); // No hay nada en este Slot if ( pItemName == "" || pItemClassName == "" ) continue; // Agregamos el objeto. KeyValues *itemData = new KeyValues("data"); itemData->SetString("name", pItemName); itemData->SetString("classname", pItemClassName); itemData->SetInt("count", pBackpackItems[i]); BackpackItems->AddItem(0, itemData); } // Bolsillo // Primero obtenemos todos los objetos y los agrupamos en array. for ( int i = 1; i < ARRAYSIZE(pPocketItems); i++ ) { pEntity = pPlayer->Inventory_GetItem(i, INVENTORY_POCKET); // No hay nada en este Slot if ( pEntity == 0 ) continue; // Aquí vamos contando los objetos de este mismo tipo. // !!!NOTE: Todo esto fue desarrollado por alguien que no sabe mucho C++... Odio los array de C++... pPocketItems[pEntity] = (pPocketItems[pEntity] + 1); pPocketCountItems++; } // Ahora obtenemos la lista de objetos con su respectiva cantidad y la mostramos. for ( int i = 1; i < ARRAYSIZE(pPocketItems); i++ ) { // !!!NOTE: i ahora es la ID del objeto if ( pPocketItems[i] == 0 || !pPocketItems[i] ) continue; pItemName = pPlayer->Inventory_GetItemNameByID(i); pItemClassName = pPlayer->Inventory_GetItemClassNameByID(i); if ( pItemName == "" || pItemClassName == "" ) continue; KeyValues *itemData = new KeyValues("data"); itemData->SetString("name", pItemName); itemData->SetString("classname", pItemClassName); itemData->SetInt("count", pPocketItems[i]); PocketItems->AddItem(0, itemData); } // Actualizamos las barras de llenado. BackpackProgress->SetProgress( pBackpackCountItems / sv_max_inventory_backpack.GetFloat() ); InventoryProgress->SetProgress( pPocketCountItems / sv_max_inventory_pocket.GetFloat() ); } SetVisible(cl_inventory.GetBool()); }