new Float:RandomCarSpawn[][] = //Kann man Leerlassen, wenn du direkt reinschreibst
{
{-1937.7556,254.7303,40.7958,305.5078},
{-1938.9354,262.7770,40.7961,308.2664},
{-1939.1427,275.5966,40.7946,234.6807},
{-1937.9933,268.9982,40.7957,296.6247},
{-1922.4078,242.3564,40.7957,1.3237},
{-1922.5801,304.1950,40.7960,179.2829},
{-1915.7850,306.7280,40.7959,180.4715} //Das letzte Komma war zuviel
};//Das ust die zeile 1058
Beiträge von Templer
-
-
Einfach die ArrayGröße leerlassen, da er dies auch der Compiler berechnen kann, nachher bitte mit meinem Code neu Kompilieren und alle Errorzeilen zeigen, da du im Script sie falsch verwendet hast:
new GunPrice[][] = {
{75}, //parachute
{75}, //golfclub
{75}, //nightstick
{75}, //knife
{75}, //baseballbat
{100}, //shovel
{75}, //poolcue
{50}, //purpledildo
{50}, //whitedildo
{50}, //longwhitedildo
{50}, //whitedildo2
{50}, //flowers
{600}, //cane
{300}, //sdpistol
{300}, //colt45
{500}, //deagle
{400}, //Tec9
{400}, //uzi
{500}, //mp5
{750}, //shotgun
{1200}, //spas12
{600}, //ak47
{600}, //m4
{1000}, //rifle
{7}, //pistolammo
{7}, //shotgunammo
{9}, //smgammo
{10}, //assaultammo
{10} //rifle
}; -
Falsche Geschwindigkeitsberechnung?
Aufgrund mangelnder Informationen kannst du diese Funktion nutzen:
/* Wiedergibt die Geschwindigkeit, egal ob zu Fuß oder im Fahrzeug, vom Spieler */
// playerid Die PlayerID vom Spieler
GetPlayerSpeed(playerid) // by misco
{
new Float:Vx, Float:Vy, Float:Vz, Float:rtn;if(IsPlayerInAnyVehicle(playerid))
{
GetVehicleVelocity(GetPlayerVehicleID(playerid), Vx, Vy, Vz);
}
else
{
GetPlayerVelocity(playerid, Vx, Vy, Vz);
}rtn = floatsqroot(Vx * Vx + Vy * Vy + Vz * Vz);
return floatround(rtn * 100 * 1.61);
} -
Zwar haut dies den ganzen Kontext von 'BlackAce' aus, aber wenn es dir so schwer fällt hab ich dir hier ein kleines Callback gemacht
forward CheckMoney(playerid);
forward OnPlayerChangeMoney(playerid, new_money);
public OnGameModeInit()
{
SetTimer("CheckMoney", 1000, true);
}
public CheckMoney(playerid)
{
if(GetPVarInt(playerid, "Spieler_Bargeld") != GetPlayerMoney(playerid))
{
CallLocalFunction("OnPlayerChangeMoney", "dd", playerid, GetPlayerMoney(playerid) - GetPVarInt(playerid, "Spieler_Bargeld"));
SetPVarInt(playerid, "Spieler_Bargeld", GetPlayerMoney(playerid));
}
return true;
}
public OnPlayerChangeMoney(playerid, new_money)
{
//Hier kannst du nun überprüfen, ob der Spieler mehr Geld bekommen oder Geld verloren hat.
if(new_money > 0) SendClientMessage(playerid, 0xFFFFFF, "Sie haben mehr Geld bekommen.");
else if(new_money < 0) SendClientMessage(playerid, 0xFFFFFF, "Sie haben Geld verloren.");
return 1;
} -
Ja, daher auch das "never used", also "nie benützt". Er durchsucht ja dein Script nach diesen Funktionen, aber um dies zu beheben suche einfach nach 'IsNumeric' oder 'ReturnUser' und setze vor Ihnen den Tag "stock ", also:
stock IsNumeric( /*Parameter*/)
stock ReturnUser( /*Parameter*/) -
Ganz einfach und vielleicht etwas mehr Arbeit ist einfach für jeden Timer von dem du die Zeit wissen willst eine Variable zu erstellen, hier das Beispiel mit GlobalTimer und OneUseTimer:
forward GlobalTimer();
forward OneUseTimer();
new gGlobalTimerCounter;
new gOneUseTimerCounter;
public OnGameModeInit()
{
SetTimer("GlobalTimer", 5000, true); //Alle 5 Sekunden.
gGlobalTimerCounter = gettime() + 5; //Ab derzeitigem Sekundenzähler noch 5 dazu.SetTimer("OneUseTimer", 10000, false); //Einmalig nach 10 Sekunden.
gOneUseTimerCounter = gettime() + 5; //Ab derzeitigem Sekundenzähler noch 10 dazu.
}
public GlobalTimer()
{
//Es wurde gerade ausgeführt und da er sich wiederholt, nochmal 5 Sekunden zum derzeitgen Sekundenzähler
gGlobalTimerCounter = gettime() + 5;//restlicher Code
return 1;
}
public OneUseTimer()
{
//Da OneUseTimer nur einmal aufgerufen wird, reicht es die Variable 'gOneUseTimerCounter'
//nur bei Auruf von SetTimer zu setzen.//restlicher Code
return 1;
}
//Um nun herauszufinden, wann GlobalTimer und OneUseTimer aufgerufen wird einfach:
new string[128];
format(string, sizeof(string), "'GlobalTimer' wird in %d Sekunden ausgeführt.", gGlobalTimerCounter - gettime());
SendClientMessage(playerid, COLOR_GREY, string);format(string, sizeof(string), "'OneUseTimer' wird in %d Sekunden ausgeführt.", gOneUseTimerCounter - gettime());
SendClientMessage(playerid, COLOR_GREY, string);//Natürlich kann es nun sein, da 'OneUseTimer' nur einmal aufgerufen wird, dass dann negative Sekunden angezeigt werden,
//weil der Sekundenzähler von 'gettime()' nun größer ist als die Variable von 'gOneUseTimerCounter', daher
//hier ein kleiner Fixnew oneusetime = gOneUseTimerCounter - gettime();
format(string, sizeof(string), "'OneUseTimer' wird in %d Sekunden ausgeführt.", (oneusetime >= 0 ? oneusetime : 0));
SendClientMessage(playerid, COLOR_GREY, string);//oder anders
new oneusetime = gOneUseTimerCounter - gettime();
if(oneusetime >= 0) format(string, sizeof(string), "'OneUseTimer' wird in %d Sekunden ausgeführt.", oneusetime);
else format(string, sizeof(string), "'OneUseTimer' wird nicht mehr ausgeführt.");
SendClientMessage(playerid, COLOR_GREY, string); -
Bei youtube ist die Musik nicht für Deutschland erlaubt: http://www.youtube.com/watch?v=-RP6IvB0AEA
kmarco: Ende Juli ist eine Open Preview
-
Hah, und ich hab programmieren gelernt, indem ich den Godfather Zeile für Zeile (1 - 2 Monate) auf deutsch übersetzt habe und somit das Script auswendig konnte. Mit der Zeit ist nach dem Übersetzen dann das Wissen zu Programmieren, wie das Empfängnis von Maria, zu mir gekommen :-p
Damaliges Problem: Ich hab nie kapiert, dass wenn man zu oft "CreateMenu" aufruft, dass der Server abstürzt xD
-
Hm, zwar ist mein Projekt nicht ganz fertig aber es ist schon sehr fortschrittlich.
Hab dir eine PN geschrieben.
-
Das was auke geschrieben hat ist das Geld auf der Bank. Das Startgeld auf der Hand ist:
GivePlayerMoney(playerid, 8400);
-
Zitat
Die Änderungen werden erst nach einem Neustart aktiv und nicht direkt live, da sowas für SA-MP zu viel wäre
Genau aus diesem Grunde finde ich es selber unbrauchbar. Ansonsten hätte man damit Beispielsweise auch gute SAMP Behebungen machen können, wie dass man Bots auf Slots setzen könnte, worauf der Spieler kein Zugriff hat.
Maximale Slotanzahl: 30
Bot bekommen ID´s nach 30//EDIT: was ich geschrieben hab, ist schmafu... Das unterstützt ja schon SAMP Intern mit den Bots
-
Zitat
Ein Gameserver, der z.B. über ein Panel konfiguriert wird, und maximal 50 Slots mit 3 NPC´s zulässt, lässt sich mit diesem Plugin in wenigen Minuten auf 500 Slots mit 10 NPC´s hochschrauben. Wer dies macht, haftet selbst dafür, da dies nicht der eigentliche Sinn des Plugins ist.
Genau aus diesem Grund sperren manche/viele Hoster das Benützen von eigenen Plugins.
Nebenbei wirkt sich das nicht negativ auf den Server aus, wenn man mittendrin die Slotanzahl erhöht/niedriger setzt? Also was würde Beispielsweise geschehen, wenn 50 Spieler oben sind und man danach die Slot auf 40 stellt.
Abgesehen von der regulären MAX_PLAYERS Definition im Script, da wenn die Slotanzahl niedriger als MAX_PLAYERS ist, zu diesen Array-Fehlern kommen, die den restlichen Code nichtmehr ausführen .
-
public OnPlayerPickUpPickup(playerid, pickupid)
{
for(new t = 1; t < MAX_HOUSES; t++)
{
if(pickupid == haus[t][hIDP] && WillRein == 1 && WillRaus == 0)
{
SetPlayerInterior(playerid,haus[t][hInt]);
SetPlayerVirtualWorld(playerid, haus[t][hID]+1);
SetPlayerPos(playerid, haus[t][hX2],haus[t][hY2],haus[t][hZ2]);
}
else if(pickupid == haus[t][hIDP2] && WillRaus == 1 && WillRein == 0)
{
SetPlayerInterior(playerid,0);
SetPlayerVirtualWorld(playerid, 0);
SetPlayerPos(playerid, haus[t][hX]+2,haus[t][hY],haus[t][hZ]);
}
}
for(new i = 1; i < MAX_TANKEN; i++)
{
if(pickupid == tanke[i][tIDP] && tanke[i][tBetrieb] == 1 && WillRein == 1 && WillRaus == 0)
{
SetPlayerInterior(playerid,tanke[i][tInt]);
SetPlayerVirtualWorld(playerid, tanke[i][tID]+1);
SetPlayerPos(playerid, tanke[i][tIX],tanke[i][tIY],tanke[i][tIZ]);
TankeCP[i] = SetPlayerCheckpoint(playerid,tanke[i][tCPX],tanke[i][tCPY],tanke[i][tCPZ],2);
}
else if(pickupid == tanke[i][tIDP] && tanke[i][tBetrieb] == 0 && WillRein == 1 && WillRaus == 0)
{
SendClientMessage(playerid,COLOR_RED,"Diese Tankstelle ist InAktiv!");
WillRein = 0;
}
else if(pickupid == tanke[i][tIDP2] && WillRaus == 1 && WillRein == 0)
{
SetPlayerInterior(playerid, 0);
SetPlayerVirtualWorld(playerid, 0);
SetPlayerPos(playerid, tanke[i][tPX]+2,tanke[i][tPY],tanke[i][tPZ]);
DisablePlayerCheckpoint(playerid);
}
}
return 1;
} -
Hört doch ma auf hier rum zu heulen xD
Fakt ist, es gab einen festen abgabe Termin.
Fakt ist, Dieser wurde schon mehrmals verlängert, weil manch einer nicht hinterher kam.
Fakt ist, Nate und Q6600 sind die einzigen die werke abgeliefert haben, der rest nicht.Wenn man schon regeln aufstellt (ja, der abgabe Termin ist auch eine Regel), und auch no so drauf beharrt das die regeln eingehalten werden (siehe Copyright), dann sollte man auch so Fair gegenüber den leuten sein die etwas zum Abgemachten Zeitpunkt abliefern und endlich einen "gewinner" raus suchen. Ich kann gut verstehen das Nate es scheisse findet das immer und immer wieder aufgeschoben wird, in der Hoffnung es kommt noch was nach.
Wenn jemand unbedingt noch was machen will (was ich nicht glaube), kann er es immernoch nach dem Contest abliefern. Und wenns schön ist kann mans halt auswählen.
Dieses Wort von Maddin zählt. Es wurde auch nirgendwo bekannt gegeben, dass es genau mindestens 2 Teilnehmer geben musste. Würde man nun die vorhin genannte Behauptung von wegen "rippen" auslassen, wäre es in dem Sinne N a t e zugesprochen seinen Preis zu erhalten. Bisher hat er ja nur als alleiniger die Mühe aufgenommen überhaupt etwas zu schaffen und da auch noch keine minderst Bewertung angegeben wurde (Beispiel: Umfrage) steht ein Sieger fest. Nebenbei wird das vorhandene Design vom Forum hier natürlich nicht ersetzt, sondern das von N a t e als Zusatz hinzugefügt und wer es nicht haben will, soll auch noch auf den Stil wechseln.
Die Sachen wie "Es gab keine Konkurrenz", "Er hat Angst vor anderen Mitstreitern", "Sein Design ist schlecht" ist keine Ausrede für eine nicht Einhaltung des Gewinnes.
Wenn die Moderatoren und Administratoren mit dieser Entscheidung nicht umgehen können, sollten Sie lieber nächstes mal diesen Contest genauer planen. Denn der Beitrag den ich gesehen habe kann nur in maximal 5 - 10 Minuten (je nach Tippgeschwindigkeit) geschrieben worden sein. Und die Regel von wegen "Verlängerung möglich" kann auch nicht gelten, da sich auch keiner in diesem Zeitraum gemeldet hat, der noch eine kleine Zeit für sein Stil gebrauchen könnte.
Daher sollte dieses Thema endgültig geschlossen werden und der N a t e soll seinen Gewinn erhalten. Nicht nur die Forengäste/-benutzer sollen sich an geschriebene Regeln halten, sondern auch die andere Seite (diese gewaltige Aussage soll denn Nutzern in diesem Thema angesprochen sein, wenn auch an einen Administrator/Moderator, die gegen die Gewinnausschüttung waren oder noch immer sind).
-
yay du kriegst 10 / 10 Punkten nur weil folgendes drin steht, ansonsten fördere ich nur meine Beitragszahl :-p
if(x==0&&y==0&&z==0) return SendClientMessage(playerid,0xFF0000FF,"FEHLERCODE 1337 LOL ZOMFG ROFL LMAO!!!!!");
auch wenn ich eher 'floatcmp' bevorzugt hätte, wegen Integer und Float Vergleich.
-
Sicher das die Definition 'gate1' auch wirklich einem CreateObject zugewiesen ist?
Ansonsten würde ich mir anschauen, ob die Codes vor SetTimer überhaupt aufgerufen werden.
und zu aller Letzt auch wirklich nachprüfen, ob die Koordinaten zum schließen nicht den Koordinaten zum öffnen ähneln (Ist ein Fehler der sehr oft passiert).
-
Ja ich dachte weil du oben es so gepostet hast:
#define MYSQL_HOST "localhost"
#define MYSQL_USER "root"
#define MYSQL_PASS "********"
#define MYSQL_DB "gtaserver"Nebenbei, hat überhaupt der Benutzer die Rechte für die Datenbank? Hast du alles bereits über phpmyadmin nachgeprüft?
-
Schau den Code genau an, wird eh so sein
-
Also die Bitshift Operatoren << und >> verschieben einfach von einem Integer die Bits nach links oder Rechts.
Testen kannst du es indem du im Windows Taschenrechner auf "Programmieren" gehst, dort dann eine Integer Bytezahl mit sagen wir vielleicht 25 eingibst und dann mit den Knöpfen RoL (BitShift nach Links <<) und RoR (BitShift nach Rechts >>) erkennen kannst, dass oben bei den Zahlen im Dualsystem sich die 1er oder 0er nach rechts oder links verschieben. Der Gebrauch ist aber in Pawn sehr unwahrscheinlich, da Pawn hauptsächlich nur mit ByteZahlen arbeitet im Gegensatz beispielsweise zu C++.
-
Also wie ich oben erkenne versucht er in der SQL per Benutzer "Smithy" zu verbinden und NICHT "admin".