Das muss doch alles Sagen oder? Ich möchte das er erstmal alles Ladet, finde ich einfach besser wenn alles Geladen hat bevor der Spieler sich einloggen kann.
Der Punkt ist hier das du die ganzen Daten Temporär erstmal ablegst, der Nachteil ist sollte der Server crashen muss eine größere Datenmenge gespeichert werden es kann dadurch
dazu kommen das Daten nicht gespeichert werden könnten und diese somit verloren gehen.
Das umzusetzen ist dank Plugin kein Problem, jedoch solltest du erstmal differzieren ob die Daten welche du laden lassen möchtest statisch ablegen möchtest oder du später darauf zurück greifen und diese verändern. Jedoch gehe ich davon aus das du die zweite Variante bevorzugst.
Zum einen erstmal zum ablegen von statischen Daten. Falls dein Skript auf MySQL bassieren sollte und du die neueren Versionen von dem MySQL Plugin von maddinat0r verwenden solltest (r30+)
hast du die Möglichkeit, die ausgelesenen Daten im Memory abzulegen um somit auf den cache später zurück zu greifen. Das kann man mit diesen Funktionen handhaben.
native Cache:cache_save(connectionHandle = 1);
native cache_delete(Cache:cache_id, connectionHandle = 1);
native cache_set_active(Cache:cache_id, connectionHandle = 1);
Beispiele findest du auch hier
http://wiki.sa-mp.com/wiki/MySQL/R33#cache_save
Kommen wir nun zur zweiten Variante, welche ich bereits auch schon verwendet habe bei meinem Ingamemapeditor.
Das ist mit dem Memory access plugin und der zusätzlichen list.inc sehr gut umsetzbar da du damit dynamische Arrays erstellen kannst und das ganze strukturieren.
http://gta-sa-mp.de/forum/3-sa…393-memory-access-plugin/
Hier mal ein Beispiel um eine Datenstruktur zu erstellen und um dort werte zu speichern:
MEM::struct obj_mem_struct {
obj_mem_objectid,
obj_mem_materialindex,
obj_mem_modelid,
obj_mem_txdname[20],
obj_mem_texturename[20],
obj_mem_materialcolor,
};
new static LIST_init<streamer_material>;
native __SetDynamicObjectMaterial(objectid, materialindex, modelid, txdname[], texturename[], materialcolor = 0) = SetDynamicObjectMaterial;
stock static _SetDynamicObjectMaterial(objectid, materialindex, modelid, txdname[], texturename[], materialcolor = 0, bool:set=false) {
if(set)return __SetDynamicObjectMaterial(objectid, materialindex, modelid, txdname, texturename, materialcolor);
new obj_insert[_insert];
obj_insert[insert_objectid] = objectid;
obj_insert[insert_materialindex] = materialindex;
new ListIt:data = LIST_find_arr(streamer_material, obj_insert),object_buffer[obj_mem_struct];
if(data)LIST::erase(streamer_material,data);
object_buffer[obj_mem_objectid] = objectid;
object_buffer[obj_mem_materialindex] = materialindex;
object_buffer[obj_mem_modelid] = modelid;
strcat(object_buffer[obj_mem_txdname],txdname,20);
strcat(object_buffer[obj_mem_texturename],texturename,20);
object_buffer[obj_mem_materialcolor] = materialcolor;
LIST::push_back_arr(streamer_material, object_buffer);
return __SetDynamicObjectMaterial(objectid, materialindex, modelid, txdname, texturename, materialcolor);
}
#if defined _ALS_SetDynamicObjectMaterial
#undef SetDynamicObjectMaterial
#else
#define _ALS_SetDynamicObjectMaterial
#endif
#define SetDynamicObjectMaterial _SetDynamicObjectMaterial