Fili:P mam dla ciebie conajmniej trzy mozliwości:
1. Zmienna
osiagniecie to zwykła tablica ale ma niezwykłe komórki:
#include <amxmodx>
enum _osiagniecie
{
Nazwa[32] = 0,
Opis[128],
Array:Zmienne,
Array:Cele,
Bron
}
new osiagniecie[_osiagniecie]
public plugin_init()
{
copy(osiagniecie[Nazwa],31,"Nazwa osiagnięcia")
copy(osiagniecie[Opis],127,"Opis osiagnięcia")
//Tylko przy zmianie wartości trzeba pamiętać o typie danej wartości
osiagniecie[Zmienne] = _:ArrayCreate(1,2)
osiagniecie[Cele] = _:ArrayCreate(1,2)
//Przy pobieraniu wartości już pięknie nam pamięta o jej typie
ArrayPushCell(osiagniecie[Zmienne],15)
ArrayPushCell(osiagniecie[Zmienne],10)
ArrayPushCell(osiagniecie[Cele],10)
ArrayPushCell(osiagniecie[Cele],5)
osiagniecie[Bron] = CSW_KNIFE
}
Zalety:• Bardzo szybki dostęp do danych
Wady:• Sztywna ilość danych
• Obszerna zmienna
osiagniecie 2. Zmienna
osiagniecie to wskaźnik na jednowymiarową tablice
Array:
#include <amxmodx>
enum _osiagniecie
{
Nazwa = 0,
Opis,
Zmienne,
Cele,
Bron
}
new Array:osiagniecie
public plugin_init()
{
new Array:Data = ArrayCreate(1,_osiagniecie)
osiagniecie = ArrayCreate(1,1)
ArrayPushCell(osiagniecie,Data)
ArrayPushCell(Data,ArrayCreate(32,1))
ArrayPushCell(Data,ArrayCreate(128,1))
ArrayPushCell(Data,ArrayCreate(1,2))
ArrayPushCell(Data,ArrayCreate(1,2))
new Array:Handle = Array:ArrayGetCell(Data,Nazwa)
ArrayPushString(Handle,"Nazwa osiagnięcia")
Handle = Array:ArrayGetCell(Data,Opis)
ArrayPushString(Handle,"Opis osiagnięcia")
Handle = Array:ArrayGetCell(Data,Zmienne)
ArrayPushCell(Handle,15)
ArrayPushCell(Handle,10)
Handle = Array:ArrayGetCell(Data,Cele)
ArrayPushCell(Handle,10)
ArrayPushCell(Handle,5)
ArrayPushCell(Data,CSW_KNIFE)
}
Zalety:• Malutka zmienna
osiagniecie• Dynamiczna ilość danych
• Brak potrzebny tworzenia nowych zmiennych przy pobieraniu danych
Wady:• Złożony proces operacji nad wartościami
3. Zmienna
osiagniecie to wskaźnik na wielowymiarową tablicę
Array:(Tak jak napisał
sebul)
#include <amxmodx>
enum _osiagniecie
{
Nazwa[32] = 0,
Opis[128],
Array:Zmienne,
Array:Cele,
Bron
}
new Array:osiagniecie;
public plugin_init()
{
osiagniecie = ArrayCreate(_osiagniecie, 1)
new Data[_osiagniecie]
copy(Data[Nazwa],31,"Nazwa osiagnięcia")
copy(Data[Opis],127,"Opis osiagnięcia")
//Tylko przy zmianie wartości trzeba pamiętać o typie danej wartości
Data[Zmienne] = _:ArrayCreate(1,2)
Data[Cele] = _:ArrayCreate(1,2)
//Przy pobieraniu wartości już pięknie nam pamięta o jej typie
ArrayPushCell(Data[Zmienne],15)
ArrayPushCell(Data[Zmienne],10)
ArrayPushCell(Data[Cele],10)
ArrayPushCell(Data[Cele],5)
Data[Bron] = CSW_KNIFE
ArrayPushArray(osiagniecie,Data)
}
Zalety:• Malutka zmienna
osiagniecie• Dynamiczna ilość danych
Wady:• Za każdym razem gdy chcesz operować nad danymi musisz tworzyć wielką tablicę (lub zrobić raz globalną)
Powyższe przykłady robią praktycznie robią to samo gdyż wrzucam do pamięci te same dane ale za to różnymi sposobami/w różne miejsca. Osobiście używam sposobu nr. 2
Użytkownik BlackPerfum edytował ten post 22.07.2014 17:40