Zitateben hieß es ich soll nen timer da rein machen.. soll der nur aus der schleife raus?
Nein, nicht der Timer gehört in die Schleife,
sondern die Deklaration des TextDraws.
Das war's, was man Dir damit ausgedrücken wollte.
Zitateben hieß es ich soll nen timer da rein machen.. soll der nur aus der schleife raus?
Nein, nicht der Timer gehört in die Schleife,
sondern die Deklaration des TextDraws.
Das war's, was man Dir damit ausgedrücken wollte.
Wenn Du es sekündlich erneuern willst, suchst
Du Dir entweder eine Funktion, die sekündlich
eneuert wird und schreibst Dir einfach eine.
Dann den kleinen Codeschnippsel von mir
einpassen und schon funktioniert's.
SetPlayerColor(playerid, 0xFF0000FF);
Auch diese Funktion hilft Dir, da sie die
Farbe des Spielers auf dem Radar editieren kann.
Nachzulesen auf: SAMP Wiki
So einfach kann das Leben sein:
if(WANTED >= 2) // musst du natürlich anpassen
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
SetPlayerMarkerForPlayer(i, playerid, 0xFF0000FF);
}
}
ZitatAlles anzeigenpublic OnPlayerDeath(playerid, killerid, reason)
{
new string[128];
format(string,sizeof(string), "Du hast %s getötet und erhälst 2000$!",SpielerName(playerid));
GivePlayerMoney(killerid,+2000);
SendClientMessage(killerid,ROT,string);
return 1;
}
Wenn Du jemand helfen willst, musst Du es wesentlich
allgemeiner halten, da der jenige sonst jede Menge
Fehlernachrichte erhalten würde.
In Deinem Falle ist SpielerName und die Farbe Rot
nirgends deklariert. Bei Dir im Script vielleicht, aber nicht
bei dem, der es braucht.
Nur mal als kleiner Tipp.
public OnPlayerDeath(playerid, killerid, reason)
{
new string[255], plname[MAX_PLAYER_NAME], sendername[MAX_PLAYER_NAME];
GetPlayerName(playerid, plname, sizeof(plname));
GetPlayerName(killerid, sendername, sizeof(sendername));
format(string, sizeof(string), "Du hast %s getötet. (+2000 Dollar)", sendername);
SendClientMessage(playerid, 0xFFFFFFFF, string);
GivePlayerMoney(playerid, 2000);
format(string, sizeof(string), "Du wurdest von %s getötet. (-2000 Dollar)", plname);
SendClientMessage(killerid, 0xFFFFFFFF, string);
GivePlayerMoney(killerid, -2000);
return 1;
}
Dann kannst Du alles weitere noch hinzufügen.
Ganz simpel...
Erstmal musst Du den gesamten TextDraw,
für jeder Spieler seperat deklarieren, wie ich
es Dir vorhinst bereits geschrieben hatte.
In der Funktion OnGameModeInit() fügst Du vor
Deinem TextDraw folgendes hinzu:
public OnGameModeInit()
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
zustand[i] = TextDrawCreate(90.000000, 316.000000, "Zustand: 0000 HP");
...
}
return 1;
}
Dann noch Deinen Timer, der Deine Funktion,
die den Status des Fahrzeugs aktualisiert, erstellen.
Eigentlich ganz simpel.
Im Forum gibts auch Tutorials, für das Erstellen eines Tachos.
Ja bei OnGameModeInit:
ShowPlayerMarkers(0);
mfg.
Genau so musst Du es machen.
Für ein Reallife Script wäre das absolut empfehlbar.
Wobei ich der Meinung bin, es wäre angebrachter,
die Funktion auf true zuzusetzen, aber das ist Geschmackssache.
Ehrlich gesagt, versteh ich das überhaupt nicht.
Auch in meinem Filterscript verwende ich diese
Funktion mehrmals und das ohne Auslastungsprobleme.
Bist Du Dir sicher, dass es von diesen 3 Zeilen kommt?
Ich bin mir das nicht so sicher.
Ohje, ohje...
Erstelle innerhalb der Funktion OnGameModeInit()
bitte einen Timer, der sekündlich Deine Funktion
wiederholt, die den Zustand des Fahrzeugs erneuert.
Innerhalb der Funktion, die den Zustand erneuert,
musst Du dann Deinen TextDrawSetString() verwenden.
Dann wird der TextDraw sekündlich erneuert.
Achso, darauf habe ich gar keine Obacht gegeben.
Aber unter diesen Augenmerk, wäre es natürlich richtiger.
Trotzdem, was ist nun weiterhin Dein Problem?
Hard_Base, hat bereits das richtige gemeint,
sich aber verdammt falsch ausgedrückt.
Das der TextDraw auch funktioniert, musst Du
diesen für jeden Spieler seperat deklarieren.
Um's einfacher auszudrücken:
for(new i = 0; i < MAX_PLAYERS; i++)
{
zustand[i] = TextDrawCreate(90.000000, 316.000000, "Zustand: 0000 HP");
...
}
Achja, Du solltest natürlich auch nicht vergessen, das der
TextDraw sekündlich für den Spieler erneuert werden muss.
Denn global festgelegt, würde er für alle das selbe anzeigen,
oder unter Umständen, wenn zwei zugleich fahren, nichts anzeigen.
ZitatAlles anzeigen
PAWN Quelltext
1
for(new i=0;i<MAX_PLAYERS i++)
zu
PAWN Quelltext
1
for(new i=0;i<MAX_PLAYERS; i++)
Ist zwar richtig, aber nicht die Ursache des Problems.
Einmal richtig hinschauen, dann sieht man den Fehler sofort.
So ist's richtig:
public Tacho()
{
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(IsPlayerInAnyVehicle(i))
{
new str[10], Float:vHealth;
GetVehicleHealth(GetPlayerVehicleID(i), vHealth);
format(str, sizeof(str), "%f", vHealth);
TextDrawSetString(zustand, str);
}
}
}
return 1;
}
Nichts für Ungut, aber vom Titel "Script-Lehrer" erwartet man mehr.
Erklär mir mal, warum Du folgenden Code verwendest?
autotimer[playerid]=SetTimerEx("drawtimer",1000,0,"i",playerid);
Der Timer, drawtimer bezieht sich doch bereits auf die
Spieler ID. Weshalb deklarierst Du den Timer also doppelt?
Deine Timer Funktion sollte wie folgt beginnen:
public drawtimer(playerid)
{
...
Das ist zwar nicht Dein Problem, aber fixen solltest Du das auch mal.
Hat sich schon geklärt, hatte mich verlesen. Entschudigung!
Schönen guten Tag an alle Leser!
Nach mehrmaligen Nachrichten, die mir die letzten Tage gestellt
wurden, habe ich mal schnell ein ganz simplen Code gebastelt,
mit dem ihr Euer Auto im Spielt mit Tasten starten und stoppen könnt.
›› Installation
- MotorEngine.pwn herunterladen
- Datei kopieren und im Ordner Filterscripts einfügen
- server.cfg öffnen und bei Filterscripts einfach MotorEngine (ohne Dateiendung) hinzufügen
›› Verwendung im Spiel
- einfach ins Auto setzen (als Fahrer natürlich)
- Du kannst nicht losfahren, solange der Motor ausgeschaltet ist
- drücke einfach die <ALT> Taste und der Motor versucht zu starten
- ist es Dir nachts zu dunkel, einfach die <L-STRG> nutzen, um das Licht anzuschalten
›› Besonderheiten
Du musst Dein Fahrzeug nicht immer wieder anschalten,
wenn Du ausgestiegen bist oder das Spiel verlassen hast.
Fahren bleiben solange an, bis sie ausgeschalten werden oder
der Server neugestartet wird bzw. das Filterscript neugeladen wird.
Das gildet ebenso für's Licht, wobei es am Tag automatisch aus geht.
Mit dem Kommando /fsinfo erhaltet Ihr eine Info vom Ersteller.
›› Fazit, Hinweise & Credits
Super einfach zu benutzen und sehr leicht in der Handhabung.
Ich verbitte mir Beiträge, die aussagen, dass es solche Codes
schon gegeben hat oder es eigentlich zu einfach wäre für den Showroom.
Ich antworte auf einige persönliche Bitten, allerdings für jederman.
Der Codeschnipsel kann gern editiert oder kopiert werden,
solange der Hinweis zum Ersteller keines Falls entfernt wird.
›› Test & Download
Pastebin Link: hier klicken
IP Adresse zum Testserver: 4future-web.de:7777
Freundliche Grüße
4#Future | Fake - Philip
Guten Tag!
Da ziehts einen fast die Schuhe aus.
Aber ohne weitere Kommentare von mir,
fügst Du es einfach folgendermaßen ein:
if(strcmp("/duty", cmdtext, true) == 0)
{
if(IsPlayerInRangeOfPoint(playerid, 2.0, 217.3575, 184.1517, 1003.0313))
{
new string[255], plname[MAX_PLAYER_NAME];
GetPlayerName(playerid, plname, sizeof(plname));
if(duty[playerid])
{
if(isPlayerInFrakt(playerid, 1))
{
format(string, sizeof(string), "Polizist %s nimmt seine Waffe und seine Marke aus dem Spint und beginnt den Dinst!", plname);
SendClientMessage(playerid, Grau, string);
duty[playerid] = 1;
SetPlayerColor(playerid, Dunkelblau);
return 1;
}
}
else
{
format(string, sizeof(string), "Polizist %s packt seine Waffe und seine Marke in dem Spint und beendet den Dienst!", plname);
SendClientMessage(playerid, Grau, string);
duty[playerid] = 0;
SetPlayerColor(playerid, Grau);
return 1;
}
}
return 1;
}
Der RAM Verbrauch bei Linux Servern ist nicht nennenswert.
Du musst Dir also keine Sorgen darum machen, dass es
eventuell zu viel Ressourcen brauchen könnte.
Zitatid: 18880 - wenn ich mich nicht täusche
Ok, danke für die Lektion!
Ich habs mal nachgeschlagen und Du hast völlig Recht.
Dann ist das ganz einzubauen zwar sehr aufwendig, aber
absolut und überhaupt kein Problem. Das Prinzip ist das
selbe, wie ein InGame-Map-Editor.
Objekt platzieren, hin und her schieben, fertig.
Alles was dann dazu gehört, also die Blitzer-Funktion,
musst Du natürlich auch schreiben. Da gibts aber Vorlagen
Also, das ist definitiv ein Mod für GTA SA.
Das Objekt, das dort vermeindlich als Blitzer
eingefügt wurde, habe ich noch niemals gesehen.
Wie auch immer mit Mod oder ähnliches erstellt,
ist das so auf einem Server derzeit nicht möglich.
Auf alle Fälle solltest Du es so machen, wie oben beschrieben.
Sollte es dann immernoch nicht funktionieren, hast Du einen
Haken im Script. Wenn Du möchtest kann ich Dir dann gern
helfen diesen zu beheben.
Mit Hilfe von Teamviewer.
Um nur Zivis an diesem Punkt spawn zu lassen,
musst Du erstmal schauen, ob Du eine Funktion
oder Variablen hast, die dies festlegen.
Du kannst nicht sagen, nur der Zivilist soll dort
spawnen, legst aber nicht fest, wer der Zivi ist.
Wenn Du dir darüber einig bist, ist es ganz simpel.
if(Ist_der_Spieler_Zivi)
{
AddPlayerClass(playerid, 1715.2151, -1912.7118, 13.5665, 358.8067, 0, 0, 0, 0, 0, 0);
}
Genau, wie es Everest schon erwähnt hat.
So und nur so funktioniert's.