Evolve für die PS4
Beiträge von Goldkiller
-
-
Zitat
Mit Expandern verhält es sich jedoch anders. Der Kontent wird erst geladen, wenn man den Expander auch expandiert.
Absolut nicht.
Da hilft der Expander aber nicht. Die Bilder werden dort trotzdem sofort geladen.
Man sollte lieber die Leute dazu bringen endlich Thumbnails zu verwenden. Ist sowieso im Sinne der meisten Bildhoster. -
Dann mach aus der 1 Dimension eben 2.
http://forum.sa-mp.com/showpost.php?p=1866779&postcount=1
http://forum.sa-mp.com/showpost.php?p=1867509&postcount=14
Die Beispiele erklären es ganz gut. Du nimmst pro Datensatz ein Float (für die Distanz) und eine Zahl (zB für den Index, der diese Distanz bei Hospitals beschreibt)
// enum anlegen mit Float:distanz und hospital_index und für dist[3][enum] nutzen.
dist[0][distanz] = GetPlayerDistanceFromPoint(playerid, Hospitals[0][0], Hospitals[0][1], Hospitals[0][2]);
dist[0][hospital_index] = 0;
[...] // für 1 und 2 auch noch
SortDeepArray( dist , distanz , SORT_ASC);
// dist[0] ist jetzt mit distanz und hospital_index der "nächste Ort" -
Die Straßenschilder sind eigenständige Objekte, nicht aber der Text darauf.
Diese sind keine eigenständige Objekte sondern Teil von anderen Objekten. Da die Straßenschilder häufig mehrfach (das Objektmodel) verwendet werden und jedes Schild ja individuell seinen eigenen Text hat ( 1 - n Beziehung könnte man sich vorstellen), sind die Texte mit Objekten in der Umgebung verbunden.
2DFX (RW Section) - Type 7 - Street Signs -
Du schließt die Funktion GetPVarString nicht. Abgesehen davon gibt dir GetPVarString als Rückgabewert nicht den String, sondern schreibt es in eine Variable die du als Parameter angibst (in deinem Fall pIDname). Du musst GetPVarString also vor format aufrufen und kannst dann pIDname verwenden. Das Wiki Beispiel erklärt es ganz gut.
http://wiki.sa-mp.com/wiki/GetPVarString
Mit sizeof(MAX_PLAYER_NAME) wirst du ebenfalls Probleme haben. MAX_PLAYER_NAME ist bereits der Wert als Zahl, da bringt dir sizeof() nichts und würde sowieso einen Wert ausgeben,den du nicht erwartest ( sizeof(MAX_PLAYER_NAME) = 1 , MAX_PLAYER_NAME = 24(?) ). -
http://forum.sa-mp.com/showpost.php?p=3333380&postcount=102
Zitat von TamerBecause actually putting the letters aside, the actual versions come from numbers. For example 0.3z is 0.3.6 and x was 0.3.5 etc etc.
Master list is currently down, but this is obviously where the 0.3z internet list servers are listed: http://lists.sa-mp.com/0.3.6/servers
And for 0.3x, you can check http://lists.sa-mp.com/0.3.5/servers
Since he's out of letters, he decided to use numbers.
Klingt recht logisch. -
Der Vollständigkeit halber:
Das Stichwort "Globale Variable" hätte es auch getan.
http://de.wikipedia.org/wiki/V…von_Variablen_.28Scope.29
SA:MP spezifischer:
http://wiki.sa-mp.com/wiki/Scripting_Basics#Scope -
Ja, speichern wäre sinnvoll.
-
Das ist nicht der gesamte Code.
-
Was wäre denn an dem o.g. SELECT falsch deiner Meinung nach?
Damit erhälst du alle vorhandenen Tabelleneinträge. Wie du das in PAWN verarbeitest hast du nicht gefragt. Du solltest die Frage schon richtig und vollständig stellen, mit korrenter Rechtschreibung und Satzzeichen. Du hast nirgendwo erwähnt, welche MySQL Version du benutzt oder nutzen möchtest. Alles offene Fragen.Du solltest dir trotzdem mal SQL genauer anschauen.
http://de.wikipedia.org/wiki/S…achelemente_und_Beispiele -
Zitat
mysql befehl
Das hier ist eigentlich kein MySQL Hilfeforum.Die Antwort wäre aber ein SELECT-Query.
Zitatum diese dan auch alle beim ausmachen zu speichern, ohne das die spieler on sind.
Das wäre dann ein UPDATE-Query.Da du nach dem "mysql befehl" gefragt hast bekommst du bewusst nur diese Antworten.
-
Du solltest als erstes mal mit vollständigen Debuginformationen kompilieren.
http://forum.sa-mp.com/showpost.php?p=1253632&postcount=7
Im Idealfall erhälst du dann auch die genaue Zeile die den Crash verursacht. Denn aktuell würde ich auf OnGameModeInit tippen:Zitat[19:48:52] [debug] #0 00065ccc in public OnGameModeInit () from irp.amx
Und da der Index -400 ist, fehlt dir wahrscheinlich irgendwo eine Gültige Model-ID eines Fahrzeuges:Zitat[19:48:52] [debug] Accessing element at negative index -400
-
Zitat
Du könntest deine Funktionen wie TimeFactory_RealDate() etc.. zu Defines abändern wäre für die Performance besser und erfüllt den selben Zweck.
Geschmackssache ob man es wirklich braucht oder nicht. Ähnliches könntest du auch bei InGame_* anmerken (außer WeekDay).ZitatIst eine gute Idee, würde gut zu RP-Servern passen.
Eine Verwendung außerhalb von RP Server (oder etwas in der Richtung) wüsste ich auch nicht. Ich wüsste zwar paar sinnvolle Dinge die ich damit machen könnte, da ich aber sowieso keinen Server habe, bleibt es nur die Idee . -
TimeFactory.
Die Bibliothek TimeFactory ermöglicht euch, auf eurem SA:MP Server die Uhr schneller laufen zu lassen als in der Realität. Ihr habt dabei aber trotzdem Zugriff auf einen vollständigen Kalender mit Uhrzeit, Wochentagen, Jahr usw. Ihr möchtet dass auf eurem Server die Uhr 4x ( 2-16 ) schneller läuft als in der Realität und trotzdem wissen, welchen Wochentag ihr habt, die Uhrzeit oder den Monat? Dann ist diese Bibliothek eventuell das richtige für euch.
Ursprünglich wollte ein User so eine Bibliothek als Auftragsarbeit haben. Es kam nicht dazu,aus Spaß hab ich mir die dann selbst erstellt und da ich selber keinen nutzen dafür habe, gebe ich das Paket frei.
Erklärung:
Es sind zwei Unix Timestamps zu Beginn nötig um die Berechnungen durchzuführen. Näheres dazu in der Funktion TimeFactory() oder im Spoiler.
Spoiler anzeigen realDate
UnixTimestamp bei dem in der ECHTEN Welt die Zeit beginnt zu rechnen
Sinnvoll wäre ein UnixTimestamp zB bei Server Eröffnung um ab da die Zeitrechnung
laufen zu lassenSpoiler anzeigen ingameDate
UnixTimestamp bei dem die Zeitrechnung Ingame beginnt.
Diese zwei Zeitstempel werden quasi miteinander verbunden. Wieviele Sekunden bereits in der echten Welt vergangen sind, wird an Hand von realDate bemessen. Gebe ich dort den 1.1.2014 00:00:00 [1388530800] an, sind bis heute (28.12.2014 18:55:00) 362 Tage und knapp 19 Stunden vergangen. Diese 361T und 19H werden mit einem Faktor, in dem Falle 4 (2 - 1 möglich), multipliziert und auf ingameDate, dem 1.1.2010 00:00:00 [1262300400], drauf gerechnet. 1444T und 76H bzw 1447Tage und 2 H. Welches Datum sich daraus ergibt, kann mit TimeFactory_InGameDate() bzw TimeFactory_InGameUnix() ausgelesen werden. Welche Funktionen es noch gibt, seht ihr unten im Beitrag.
Vergeht also bei dem Faktor 4 in der echten Welt 1 Tag, vergehen im Spiel 4 Tage.Die Erklärung hinter der Bibliothek ist eventuell mit einem Bild einfacher, daher hier eine Darstellung.
Faktor 4:
1 Jahr Echtzeit entspricht 4 Jahren InGame.Es stimmt allerdings nicht ganz in diesem Fall, dass 1 Jahr 4 Jahren Ingame entspricht. 2012 war nämlich ein Schaltjahr, weshalb es nicht ganz 4 Jahre sind.
Welches Datum es exakt wäre in 1 Jahr ausgehend vom 1.1.2014 00:00:00, könnte man mit TimeFactory_Convert() auslesen.
new
tm<tTime>;
tTime = TimeFactory_Convert( REAL_TO_INGAME , 0 , 0 , 0 , 1, 1 , 2015 );
//Startzeit +1 Jahr: Tue Dec 31 00:00:00 2013Damit es eben so genau funktioniert mit dem Datum wird auf ein Plugin zurück gegriffen (CTime).
Dort (bei dem Plugin) muss darauf geachtet werden, dass der Monat bei 0,das Jahr bei 1900 und die Woche mit dem Sonntag als 0 beginnt.Es wird stets in localtime gerechnet, nicht gmtime.
Siehe dazu mehr hier.Funktionen:
Bei einem tm: Objekt handelt es sich um eine spezielle Struktur:Enumerator (tm "structure"):
enum e_tm {
tm_sec,
tm_min,
tm_hour,
tm_mday,
tm_mon,
tm_year,
tm_wday,
tm_yday,
tm_isdst
};
Quelle
Nun zu den eigentlichen Funktionen der Bilbiothek.
Initialfunktion:
/*
Funktion zum Starten der Berechnung. Muss als erstes gemacht werden bevor
alle anderen Funktionen genutzt werden können.
realDate
UnixTimestamp bei dem in der ECHTEN Welt die Zeit beginnt zu rechnen
Sinnvoll wäre ein UnixTimestamp zB bei Server Eröffnung um ab da die Zeitrechnung
laufen zu lasseningameDate
UnixTimestamp bei dem die Zeitrechnung Ingame beginnt.
speed
Integer um die Zeitrechnung zu beschleunigen (2 - 16)
*/
TimeFactory(realdate = 0, ingamedate = 0 , speed = 4)Initialwerte:
/*
TimeFactory_RealDate
Gibt den Unix Timestamp von Initialwert speed an*/
TimeFactory_RealDate()/*
TimeFactory_IngameInitDate
Gibt den Unix Timestamp von Initialwert ingameDate an*/
TimeFactory_IngameInitDate()/*
TimeFactory_Speed
Gibt den Zeitfaktor an, der IngameInitDate beschleunigt*/
TimeFactory_Speed()/*
TimeFactory_GetElapsedSec
Zeit in Sec die Vergangen ist bis <jetzt>
*/TimeFactory_GetElapsedSec( since = 0 )
/*
TimeFactory_InGameUnix
Gibt den UnixTimestamp der InGame aktuell ist.
Ist immer größer/gleich dem IngameDate bzw "ingamedate" aus TimeFactory*/
TimeFactory_InGameUnix()/*
tm:TimeFactory_InGameDate
Gibt eine Variable zurück, die basierend auf TimeFactory_InGameUnix
ein Array zurück gibt mit folgender Struktur:
var {
tm_sec, //sekunde
tm_min, // Minute
tm_hour, // Stunde
tm_mday, // Monatstag
tm_mon, // 0 Jan,1 Feb, 2 Mär, 3 Apr ...
tm_year, // X - 1900
tm_wday, // 0 SO,1 MO,2 TU,3 WE,4 TH,5 FR, 6 SA
tm_yday, // Tag des Jahres
tm_isdst // DayLightSaving
}
Mit dieser Struktur wird das Datum und Zeit genau beschrieben.
*/
tm:TimeFactory_InGameDate()TimeFactory_PrintDate( tm<tTime>)
/*
Konvertiert ein Datum von:
InGame zur Realen Zeiten
Realen Zeite zu InGame
enum {
INGAME_TO_REAL,
REAL_TO_INGAME
}
*/
tm:TimeFactory_Convert(type,second,minute,hour,dayofmonth,month,year)InGame_Second()
InGame_Hour()
InGame_Minute()
InGame_DayOfMonth()
InGame_Month()
InGame_Year()/*
InGame_WeekDay
Wochentag
0 ist Montag
...
6 ist Sonntag
*/
InGame_WeekDay()Vorraussetzung:
Es muss folgendes Plugin installiert sein: [Plugin] CTime LibraryScreenshots:
Gibt nicht viel zu zeigen auser ein Beispiel Textdraw, dass das aktuelle Datum und Uhrzeit Ingame anzeigt. Das Script dazu ist im Download enthalten.
Hotlink #1
Hotlink #2Download:
goldkiller.bplaced.net
pastebin.comGoldkiller
-
Warum zur Hölle baust du gleich 4 Verbindungen zu der gleichen MySQL Datenbank auf?
Das macht doch gar keinen Sinn außer du willst mit unterschiedlichen Userbereichtigungen arbeiten und READ,WRITE,UPDATE voneinander trennen. Das bezweifel ich aber an der Stelle mal ganz stark, da du überall identische Benutzer verwendest. -
new pID,/* .. */ // Nur pID zu erstellen reicht nicht
//
if(sscanf(params,"s[24]",unbanname)) return SendClientMessage(playerid,0xFF0000FF,"[FEHLER]{FFFFFF} /UnBan [Name]");
if(mysql_CheckTBanAccount(pID) == 1) // <- pID gibt es nicht "gültig"
// ...
else if(SpielerInfo[pID][pBanned] == 1) // <- pID gibt es nicht "gültig". Wie soll ein gesperrter Spieler überhaupt auf dem Server sein,damit du pBanned checken kannst?
// ...
else if(SpielerInfo[pID][pBanned] == 0 || mysql_CheckTBanAccount(pID) == 0)// <- pID gibt es nicht "gültig". Wie soll ein gesperrter Spieler überhaupt auf dem Server sein,damit du pBanned checken kannst?
Nur pID zu deklarieren bringt dir ja schließlich nichts. Wenn du bei /UNBAN den Namen angibst ( String ), kannst du schlecht eine ID benutzen um darüber zu entbannen.
Du müsstest mysql_CheckTBanAccount als Alternative auch mit String / Namen erstellen und anwenden. -
Das gehört hier dann doch nicht hin.
-
Du kannst auch einfach richtig für das crashdetect Plugin kompilieren und erhälst direkt die Zeile weshalb es den Fehler gibt.
http://forum.sa-mp.com/showpost.php?p=1253632&postcount=7
Da spart man sich das komplette durchsuchen. -
Genau genommen sehe ich am Ende kein mysql_query(Query) bei dir.
-
Wieso klammerst du denn auch die Zeile aus?
//new id=getFreeCarID(); // Ob du wirklich id brauchst kann ich nicht unbedingt beurteilen.
Natürlich kommt dann "Undefined id". Du lässt es ja auch nie erstellen.forward OnFrakCarsLoad();
public OnFrakCarsLoad()
{
new num_fields,num_rows;
cache_get_data(num_rows,num_fields,dbhandle);
printf("num_rows=%d,num_fields=%d",num_rows,num_fields);
if(!num_rows)return 1;
for(new i=0; i<num_rows; i++) // i ist der "Row Index" für dein MySQL Ergebnis. Bloß nicht id!
{
new id=getFreeCarID(); // Ob du wirklich id brauchst kann ich nicht unbedingt beurteilen.
printf("id = %d, i = %d",id,i);
fInfo[id][model]=cache_get_field_content_int(i,"model",dbhandle); // i, nicht id
fInfo[id][fid]=cache_get_field_content_int(i,"Frakid",dbhandle);// i, nicht id
fInfo[id][f_c1]=cache_get_field_content_int(i,"color1",dbhandle);// i, nicht id
fInfo[id][f_c2]=cache_get_field_content_int(i,"color2",dbhandle);// i, nicht id
fInfo[id][f_x]=cache_get_field_content_float(i,"PosX",dbhandle);// i, nicht id
fInfo[id][f_y]=cache_get_field_content_float(i,"PosY",dbhandle);// i, nicht id
fInfo[id][f_z]=cache_get_field_content_float(i,"PosZ",dbhandle);// i, nicht id
fInfo[id][f_r]=cache_get_field_content_float(i,"PosR",dbhandle);// i, nicht id
fInfo[id][caridd]=cache_get_field_content_int(i,"carid",dbhandle);// i, nicht id
fInfo[id][db_id]=cache_get_field_content_int(i,"id",dbhandle);// i, nicht id
//fInfo[id][kmstand]=cache_get_field_content_float(i,"kmstand",dbhandle);// i, nicht id
fInfo[id][id_x]=CreateVehicle(fInfo[id][model],fInfo[id][f_x],fInfo[id][f_y],fInfo[id][f_z],fInfo[id][f_r],fInfo[id][f_c1],fInfo[id][f_c2],-1);
printf("Fahrzeuge geladen und erstellt %d", /* fInfo[id][model] */ fInfo[id][id_x] );
}
return 1;
}
Ob du getFreeCarID() brauchst weiss ich nicht. Ich habe nie gesehen was die Funktion macht und daher musst du selber wissen, ob du das brauchst. Wenn du es nicht brauchst, dann macht natürlich auch id (Variable) keinen Sinn. Die Funktion sucht dir ja nur den nächsten freien Index bei fInfo aus (klingt zumindest so).