Dokumentacja Steamworks
Narzędzia przedmiotów Ekwipunku Steam
Od teraz w ramach wersji beta można określić „narzędzia”, które służą do modyfikacji tagów Ekwipunku Steam na innych przedmiotach.

Za pomocą wywołania ISteamInventory::ExchangeItems przekazywane jest zarówno narzędzie, jak i przedmiot docelowy – tagi zostaną przeniesione lub wygenerowane i zostanie utworzony nowy przedmiot (skopiowany z przedmiotu docelowego).

Te tagi są automatycznie przesyłane wraz z innymi atrybutami przedmiotu do klienta Steam i mogą zostać uzyskane przez wywołanie ISteamInventory::GetResultItemProperty() z nazwą właściwości „tags”. Tagi zostaną zwrócone w podanym buforze stringów i będą oddzielone średnikiem.

Prosty przykład


Oto przykład narzędzia, które może „pomalować” obiekt na inny kolor.

Na początek potrzebujesz definicji przedmiotu dla swojego narzędzia. Zwróć uwagę, że prawdopodobnie będziesz chciał usunąć tagi, używając do tego właściwości tags_to_remove_on_tool_use, w przeciwnym razie na twoim przedmiocie mogą pojawić się duplikaty tagów lub ich kategorii, jeżeli użyto na nim wielu narzędzi. Wszystkie pasujące tagi zostaną usunięte, zanim zostaną zastosowane nowe.

itemdefid: 100 type: tag_tool name: Red Paint Can tags: paint_color:red tags_to_remove_on_tool_use: paint_color

W przedmiocie docelowym musisz sprecyzować, że może zaakceptować tag „paint_color”:

itemdefid: 200 type: item name: Hat allowed_tags_from_tools: paint_color

Następnie korzystając z wywołania ISteamInventory::ExchangeItems, użytkownik może zastosować narzędzie „Red Paint Can” na swoim „Hat”, a nowo powstały przedmiot powinien zawierać tag „paint_color:red”. Pamiętaj, że oczekiwane ID przedmiotu powinno być zgodne z ID definicji przedmiotu docelowego.

SteamItemInstanceID_t inputItems[2] = { unPaintCanItemDefID, unHatItemDefID }; uint32 inputQuantities[2] = { 1, 1 }; SteamItemDef_t outputItems[1] = { unHatItemDefID }; uint32 outputQuantity[1] = { 1 }; SteamInventoryResult_t resultHandle; SteamInventory()->ExchangeItems( &resultHandle, outputItems, outputQuantity, 1, inputItems, inputQuantities, 2 );

Jeśli chcesz mieć narzędzie, które po prostu usuwa tagi, możesz określić coś jak np. „Paint Stripper”. Analogicznie do powyższego przykładu wywołasz ISteamInventory::ExchangeItems. Twoja definicja przedmiotu będzie miała ustawioną tylko właściwość tags_to_remove_on_tool_use.

itemdefid: 300 type: tag_tool name: Paint Stripper tags_to_remove_on_tool_use: paint_color

Przykład generatora tagów


Możesz mieć narzędzie nakładające tagi z definicji przedmiotu tag_generator zamiast konkretny kolor.

itemdefid: 500 type: tag_generator name: Tag Generator Paint tag_generator_name: paint_color tag_generator_values: red:33;blue:33;green:33;gold:1 itemdefid: 100 type: tag_tool name: Random Paint Can tag_generators: 500 tags_to_remove_on_tool_use: paint_color

Gdy użytkownik zastosuje „Random Paint Can” do swojego „Hat”, używając wywołania ISteamInventory::ExchangeItems, szanse na uzyskanie koloru czerwonego, zielonego lub niebieskiego wynoszą 33%, a złotego — 1%.

Przykład ograniczenia dynamicznych właściwości


Możesz ograniczyć możliwość zmiany pewnych dynamicznych właściwości za pomocą tagów. Używając tag_tool, możesz umożliwić ustawianie tych właściwości na przedmiocie, na którym nie było to wcześniej możliwe, jeżeli nie miał on wymaganych tagów. Oto przykład przedmiotu liczącego zabójstwa dokonane z użyciem wyrzutni rakiet.

itemdefid: 100 type: item name: Rocket Launcher itemdefid: 200 type: tag_tool name: Kill Stat Tracker tags: stat_tracker:kills tags_to_remove_on_tool_use: stat_tracker:kills

Używając API Steamworks, możesz sprawić, by klient aktualizował właściwości wyrzutni rakiet dla dynamicznej właściwości „kills”. Mimo to na stronie konfiguracji dla tej dynamicznej właściwości możesz ograniczyć to działanie tylko do przedmiotów mających tag „stat_tracker” albo na przedmiocie, albo na powiązanej z nim definicji przedmiotu. Gdy tylko „Kill Stat Tracker” zostanie zastosowany do wyrzutni rakiet, będzie można do niej także dodać właściwość dynamiczną „kills”.