Beiträge von Simon
-
-
Hallo,
Ich suche eine Formel oder ein Codeschnipsel um folgendes herauszubekommen:
Ich befinde mich irgentwo und mir wird irgentwo ein Checkpoint angezeigt. Die Positionen sind mir bekannt.
Nun möchte ich die Richtung des Spielers (angle) ausrechnen, die der Spieler haben muss, um direkt den Checkpoint anzugucken.
Ich denke man kann das mit Vektoren lösen, mir fehlt da aber das wissen. Eine Formel würde jedoch reichen.
Ich hoffe ihr habt da was für mich
-
Teste es doch
Also wenn die mysql Funktion geht, sollte es richtig sein.
-
Wieder eine kleine Frage zu den Zügen
Kann es sein, das Züge nicht nach der angegebenen Respawn-zeit respawnen?
-
Ist ziemlich logisch. Das Pickup ist da und jedesmal wenn du da reingehst bekommst du halt die Waffe und die Nachricht. Oder wird sie beim reingehen ca 1000 mal gespamt?
Du solltest das ein wenig einstellen, so dass man halt nur die Waffe bekommt, sollte man diese nicht haben oder nur geringfügig Munition haben.
Dazu kannst du auch eine Zeit einstellen, wann er das Pickup aufheben darf und diese abfragen bevor er die Waffe bekommt -
Ja das geht durch Abfrage der Tasten wäre es am einfachsten.
Nein, ich möchte wissen ob er sich vorwärts oder rückwärts bewegt. Wenn ich bei einer hohen Geschwindigkeit die Tasten loslasse, fahre ich trotzdem weiter. Auch dann muss man es noch abfragen können
-
Hat jemand ein Codeschnipsel, mit dem man Abfragen kann, ob ein Spieler vorwärts oder rückwärts fährt,
Theoretisch müsse es ja gehen, wenn man die Richtung nimmt, in die der Spieler schaut und die Richtung in die der Spieler fährt, Und wenn diese nicht gleich ist, fährt er rückwärts.
Ich habe nur keine Ahnung ob es genauso Umsetzbar ist und wie da die genaue Rechnung ist. Mir würde da auch eine aussagekräftig Formel reichen.
Ich hoffe ihr könnt mir Helfen
-
Ich habe in anderen Beiträgen gelesen, dass es nicht geht.
Ich benutzte das ganz normal. Ich habe mehrere Job-Fahrzeuge und bei allen Job-Fahrzeugen wird der Spieler rausgeworfen, außer bei Zügen.
-
Ja das wäre meine Lösung, aber ist es tatsächlich so, dass diese Funktion nicht funktioniert? Oder liegt der Fehler bei mir?
-
Kann das sein, dass einige Funktionen bei Zügen nicht funktionieren?
Zum Beispiel RemovePlayerFromVehicle(playerid);
-
Ja, habe ich schon gemacht, bevor ich hier den Beitrag verfasst habe.
Ich habe Windows 10, habe mal im Kompatibilitäts-Modus gestartet, nun geht es
Danke trotzdem
-
Ich muss das mal ausprobieren. Ich wollte ja eigentlich nur ein bereits vorhandenes enum erweitern und die Werte im Array ergänzen.
Da das aber ja nicht ging, habe ich versucht ein eigenständiges Array mit enum zu machen, jedoch auch da stürzte der ab.
Danach habe ich erstmal versucht allgemein ein enum mit irgentwelchen Namen zu erstellen die auf gar kein fall schon existieren und trotzdem stürzt er ab.Ich teste es mal in einem leeren gamemode
//Update: in einem Blanken Gamemode klappt es wunderbar (siehe Bild im Anhang)
//Update: Auch wenn ich das vorhandene erweitere, klappt es in einem blanken Gamemode
-
Hallo,
Ich wollte die neue Actor-Möglichkeit mit 0.3.7 nutzen. Habe schon einige eingefügt und es funktioniert wunderbar.
Ich speichere dabei die ID des Actors, den Skin und seine Position in einem Array.
Nun wollte ich meinen Ammunations auch jeweils einen Actor geben. Sobald ich nun mein enum erweitern möchte (actorid, actorSkin, acterposition), stürzt der compiler ab.
Die Werte in meinem Array sind dabei völlig egal.
Ich habe auch versucht ein komplett neues enum mit einem neuen Array anzulegen, nur für die Actors. Dabei passiert folgendes:
Gebe ich dem enum keinen namen, funktioniert der compiler wunderbar. gebe ich ihm einen namen, stürzt er wieder ab, Das Array exisitiert zu diesem Zeitpunkt noch gar nicht.
Bin bisschen überrascht, normalerweise kenne ich das Problem bei heftigen Fehlern, jedoch ist kein auf anhieb sichtbarer Fehler zu erkennen.
Ich bin dann angefangen, mein enum und das Array nach und nach zu erweitern. So habe ich erst nur die actorid im enum hinzugefügt und im Array den Wert ergänzt. Noch funktioniert der Compiler. Erweitere ich mein Enum nun noch einmal um eine Information, ganz egal welche, stürzt der Compiler wieder ab, als existieren Grenzen, die ich überschreite.
Eventuell hat mal jemand einen Tipp oder eine Idee.
-
Ups, ja hat sich beim kopieren mit eingeschlichen.
Wenn du den Ort jedoch in einer extra Variablen speichern möchtest, muss du diese als String deklarieren und dann mit format füllen.
-
-
In dem Timer soll einfach nur geschaut werden, wer so gerade im Auto sitzt und fährt und dann soll das Tacho angepasst werden. Das heißt spieler die gar nicht fahren werden direkt übersprungen, bei den spielern die fahren, werden daten des Autos berechnet die für das Tacho relevant sind und in form eines TextDraws angezeigt.
-
Es gibt kein public OnVehicleTakeDamage oder sowas. Um das herrauszufinden, musst du einen timer mit einem sehr kleinen Intervall machen.
Du vergleichst dann immer die Health vom Auto mit der davor:
new Float:vHealth[MAX_VEHICLES];
new vTimer[MAX_PLAYERS];
forward AutoCrashCheck(playerid);GetVehicleHealth(vehicleid, vHealth[vehicleid]);
vTimer[playerid] = SetTimerEx("AutoCrashCheck",300,1,"d",playerid);public AutoCrashCheck(playerid)
{
if(!IsPlayerInAnyVehicle(playerid)) return KillTimer(vTimer[playerid]);
if(GetPlayerState != PLAYER_STATE_DRIVER) return 0;
new v = GetPlayerVehicleID(playerid);
new Float:vH;
GetVehicleHealth(v,vH);
if(vHealth[v]-200 >= vH) //falls er einen mindestschaden von 200 bekommen hat, kannst das ja anpassen
{
//Hat Crash gebaut
}
return 1;
} -
Was ist sinnvoller?
Ein globaler timer (333ms repeat) der alle spieler durchläuft und und Abfragen durchführt um ggf. etwas zu machen
Ein Spielerbezogenen Timer(333ms repeat der für den jeweiligen Spieler abfragen durchführt um ggf. etwas zu machenBeim globalentimer wäre es nur ein Timer der läuft und auch nur ein public welches aufgerufen wird, indem dann aber mehr gemacht wird.
Beim Spielerbezogenen wären es mehrere Timer (je nach spieleranzahl unterschiedlich) und dann jedesmal ein public aufruft, indem dann aber dementsprechend weniger gemacht wird, weil er nicht alle anderen Spieler durchlaufen muss.Hört sich ausgeglichen an, aber was genau ist sinnvoller
-
Wenn ich eine Array einen Wert zuweisen möchte, der für jeden Index im Array gleich ist, mache ich das so:
new var[Index] = {Wert, ...};
Wenn ich nun aber ein multidimensionalen Array habe, wie muss ich das dann machen? oder geht das nicht?
new var[index][J] = ??
Normalerweise würde ich das ja so machen:
new var[index][J] = {
{Wert, Wert, Wert, ...},
{Wert, Wert, Wert, ...},
...
};
Gibt es dafür eine kürzere schreibweise wie bei einem normalen Array? -
Natürlich
Einmal die Timer und wie die Textdraws dann verwendet werden
Code
Alles anzeigennew TruckerTimer[MAX_VEHICLES]; forward TruckerUpdate(vehicleid); dcmd_befehl(...) { //Einige Abfragen //Textdraw wird erstellt, siehe vorherigen Beitrag TruckerTimer[vehicleid] = SetTimerEx("TruckerUpdate",1000,1,"d",vehicleid); return 1; } public TruckerUpdate(vehicleid) { //Einige Abfragen die darüber entscheiden ob weiter aufgeladen wird oder ob der Vorgang abgebrochen werden soll (zum Beispiel wenn er nicht mehr an der entsprechenden Position ist) //Wenn alles stimmt wird er weiter beladen: TrailerWare[vehicleid][Volume]+=tNew; TrailerWare[vehicleid][Preis] = nPreis; tLager[i][Lager]-=tNew; UpdateBiz(Biz_tLager); UpdateTruckerInfo(playerid,tLager[i][Name], tLager[i][Lager]); //hier wird textdraw aktualisiert return 1; } stock UpdateTruckerInfo(playerid, header[], lager) { format(hstr,sizeof(hstr),"~g~%s",header); format(tdstr,sizeof(tdstr),"%d %s~n~%d %s~n~$%0.2f / %s~n~$%0.2f", lager, Warenart[wart][Einheit_P], TrailerWare[trid][Volume], Warenart[wart][Einheit_P], TrailerWare[trid][Preis], Warenart[wart][Einheit_S], floatmul(TrailerWare[trid][Volume],TrailerWare[trid][Preis])); PlayerTextDrawSetString(playerid,pTextDraw[playerid][InfoBoxHeader],hstr); PlayerTextDrawSetString(playerid,pTextDraw[playerid][InfoBoxInfo],tdstr); return 1; }
Beim Tacho war ich mir nie sicher, wie ich den Timer steuern soll.
ob jeder Spieler einen spielerbezogenen Timer bekommt, oder ob es einen allgemeinen Timer.Habe nun einen allgemeinen Timer gemacht, alle 1/3 Sekunden werden alle Autos durchlaufen (dabei werden nicht erstellte oder ohne Motor übersprungen)
dann wird geschaut ob der Motor von dem Auto an ist und ob ein Spieler drinne sitzt. Wenn das der Fall ist, wird das Tacho für den Spieler mit den Daten des Autos aktualisiert. Wäre eventuell nochmal zu überdenken.Code
Alles anzeigenforward UpdateSpeedo(); OnGameModeInit() { SetTimer("UpdateSpeedo",331,1); //Was diesen Timer angeht habe ich viel umhergespielt return 1; } dcmd_motor(...) { //Einige Abfragen //Motor starten //Textdraw erstellen return 1; } public UpdateSpeedo() { //Einige Abfragen und Berechnungen zur Geschwindigkeit etc. UpdateTacho(playerid, cInfo[GetVehicleModel(v)-400][cName], DisplayedSpeed, vInfo[v][vTempo], vInfo[v][vTank], cInfo[GetVehicleModel(v)-400][cMaxTank], floatround(Health, floatround_ceil)); return 1; } stock UpdateTacho(playerid, Auto[], Geschw, Tempo, Tank, MaxTank, Status) { new TankStr[32], StatsStr[32], GeschStr[16], TempoStr[16], str1[100], str2[100]; format(TankStr, 32, "Tank: %d/%dL", Tank, MaxTank); format(StatsStr, 32, "Status: %d/1000", Status); format(GeschStr, 16, "%03d Km/h", Geschw); format(TempoStr, 16, "%03d", Tempo); format(str1,sizeof(str1),"%s~n~~n~%s",GeschStr,TankStr); format(str2,sizeof(str2)," Tempomat: %s~n~~n~%s",TempoStr,StatsStr); PlayerTextDrawSetString(playerid, pTextDraw[playerid][TachoInfo1], Auto); PlayerTextDrawSetString(playerid, pTextDraw[playerid][TachoInfo2], str1); PlayerTextDrawSetString(playerid, pTextDraw[playerid][TachoInfo3], str2); return 1; }