habe ich jetzt steht das in der konsole :
Schau nochmal im Poste oben, du hast meinen Edit wohl nicht mehr gesehen. Warst zu schnell.
habe ich jetzt steht das in der konsole :
Schau nochmal im Poste oben, du hast meinen Edit wohl nicht mehr gesehen. Warst zu schnell.
Sorry, hab ich vergessen zu ändern.
if(hInfo[id][h_status]==0)continue;
zu
if(hInfo[id][h_status]==0)return 1;
Und:
cache_get_field_content(0,"Username",name,dbhandle); //Die 0
EDIT:
MrKonsonant: ^Les nochmal hier.^
Ah, so machst du das. Dann musst du die Haus ID übergeben:
public UpdateHausText(id)
{
new num_rows, num_fields;
cache_get_data(num_rows, num_fields, dbhandle);
if(hInfo[id][h_status]==0)return 1;
new name[MAX_PLAYER_NAME];
cache_get_field_content(0,"Username",name,dbhandle);
new string[164];
format(string,sizeof(string),"Haus ID: %i\nBesitzer: %s",hInfo[id][h_db_id],name);
Update3DTextLabelText(hInfo[id][h_id_y],grün,string);
return 1;
}
mysql_function_query(dbhandle,string,true,"UpdateHausText","d", uid);
Poste bitte mal dein Query das du zuvor aufrufst.
Den Namen hast du in der Datenbank aber schon zugeweisen, oder?
Und "hInfo[ i ][h_status]" ist auch wirklich nicht bei allen anderen 0?
Du kannst auch mal den string nach dem format mit "print(string);" ausgeben lassen, dass weißt du für welche Häuser es überall gemacht wird.
public UpdateHausText()
{
new num_rows, num_fields;
cache_get_data(num_rows, num_fields, dbhandle);
for(new i=0; i<num_rows; i++)
{
if(hInfo[i][h_status]==0)continue;
new name[MAX_PLAYER_NAME];
cache_get_field_content(i,"Username",name,dbhandle);
new string[164];
format(string,sizeof(string),"Haus ID: %i\nBesitzer: %s",hInfo[i][h_db_id],name);
Update3DTextLabelText(hInfo[i][h_id_y],grün,string);
}
return 1;
}
Du brauchst da nicht zwei Schleifen verschachteln.
if(!strcmp("/Abstimmungstarten",cmdtext,true, 18))
{
if(cmdtext[19] = ' ')
{
//if(!IsPlayerAdmin(playerid))return SendClientMessage(playerid,0xF50000FF,"Du kannst keine Abstimmung starten!");
if(!cmdtext[20]) return SendClientMessage(playerid,0xF50000FF,"BENUTZE: /Abstimmungstarten < FRAGE >!");
SendClientMessageToAll(0xF50000FF,">=========================================<");
SendClientMessageToAll(0xFF6E00FF,"<<<<>>>> ÖFFENTLICHE ABSTIMMUNG <<<<>>>>");
format(string,sizeof string,"FRAGE: %s",cmdtext[20]);
SendClientMessageToAll(0xFFD200FF,string);
SendClientMessageToAll(0x0041FFFF,"Stimme abgeben mit /stimmen [JA/NEIN]");
SendClientMessageToAll(0x0041FFFF,"Mit /publik kannst du eine anonyme Stimme geben!");
SendClientMessageToAll(0x050000FF,">=========================================<");
VoteAvailable = 1;
SetTimer("VotingTimes",VoteTimeSecondss,false);
return 1;
}
}
Oder du schreibst es als zcmd Befehl:
Ich beschreibe dir das Prinzip, den Code musst du dann selbst machen, da ich deine Variablen und dein Speichersystem nicht kenne.
Bei OnPlayerRequestClass fragst du ab, ob der Spieler einen Skin gespeichert hat, in seinem Account. Wenn ja, dann spawnst du den Spieler mit SetSpawnInfo und SpawnPlayer. Bei OnPlayerSpawn gibst du ihm dann den Skin.
Wenn nein, dann passiert erst mal gar nichts. Wenn dann OnPlayerRequestSpawn aufgerufen wird, speicherst du den ausgewählten Skin mit GetPlayerSkin in eine Variable und in das Account. Außerdem setzt du einen anderen Wert im Account auf 1, damit du weißt, dass derjenige sich bereits einen Skin ausgesucht hat (oder mit MySQL kannst du auch einfach den default Wert der skin Spalte zu -1 setzen, somit entspricht -1 gleich keinem gespeicherten Skin.
Falls du Probleme mit dem Code hast, poste den Code den du bis dahin hast und beschreibe dein Problem.
Die Ideen hast du doch schon mal.
Jetzt setze dich mal hin und probiere es. So schwer ist das nicht, das bekommst du sicher mit etwas Arbeit hin. In fünf Minuten vielleicht nicht, aber wenn du zwei drei Stunden investierst, dann bekommst du das hin.
Und wie schon gesagt, wenn du fest hängst, dann poste den Code und es hilft dir jemand. Wenn dir einer den ganzen Code jetzt schreibt, dann lernst du nichts dabei und musst nächstes mal wieder fragen. Machst du es selbst verstehst du es und kannst es dann auch dein System nennen.
Auf geht's, das bekommst du hin!
Du hättest die letzten drei Parameter nur bei IsPlayerInRangeOfPoint weg machen sollen.
Mache die Objekte zu
torL = CreateObject(971, 1517.89, -1545.20, 12.57, 0.00, 0.00, 90.00);
torR = CreateObject(971, 1529.67, -1545.20, 12.57, 0.00, 0.00, 90.00);
Dann musst du einen Befehl erstellen, mit dem man einen Spieler der im Krankenhaus ist wieder aus dem Krankenhaus holt. Die Funktion auf den Spieler aus dem Krankenhaus zu holen steht ja im Code.
Probiere es erst mal selbst, und wenn du dann nicht mehr weiter kommst, poste den Code den du bis dahin hast, dann können wir dir auch besser helfen, wenn du dazu erklärst wie du es gerne hättest, und wie es momentan ist.
Hier eine Auswahl:
http://forum.sa-mp.com/showthread.php?t=355470
http://forum.sa-mp.com/showthread.php?t=390299
[ FILTERSCRIPT ] Krankenhaus-System[V1.00]
Wenn du etwas Zeit investierst, kannst du so etwas aber auch relativ einfach selbst schreiben, möglicherweise mit Vorlage einer der obigen als Beispiel zum abgucken.
Das sieht mir ganz danach aus als wird da etwas nicht richtig zurück gesetzt wenn du den Server verlässt.
Was passiert denn, wenn du dich einloggst, dann ausloggst, dann dem Server schließt und wieder öffnest, und dich dann wieder einloggst? Geht es dann?
Wenn ja, dann solltest du alle Werte prüfen, die du beim Connect und Login hast, die mit den Textdraws in irgend einer Weise zu tun haben.
Solche Probleme sind extrem schwer zu finden, wenn man nur Code hat, daher musst du viel selbst suchen.
Wenn du das ganze dann debuggt hast, komplett, dann muss irgendwann bei den beiden Login Vorgängen ein unterschiedlicher Werte geprintet werden.
Das gute ist, dass du es immer wieder selbst testen kannst.
Am besten du machst das mit dem Debug mal und postest dann die Ergebnisse.
Edit: Post unten:
hav0K~: Das ging ja super schnell! Sehr gut gemacht!
Ja, das Debugging ist wirklich was feines.
Die Variablen müssen auch in Groß und Kleinschreibung stimmen. Ich habe vorhin mal gesehen, dass du das T groß hattest.
Das musst du überall gleich haben. Entweder du schreibst überall
TorL und TorR
ODER
torL und torR
Aber nicht einmal so und einmal so.
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/auf", cmdtext, true) == 0)//Öffnet das Tor
{
if(IsPlayerInRangeOfPoint(playerid,30.0,1517.89, -1545.20, 12.57))
{
MoveObject(torL,1517.89, -1545.20, 0.571, 4); //X bleibt gleich, Y bleibt gleich, Z wird kleiner als beim Erstellen
SendClientMessage(playerid,Rot,"Das Tor schließt in 5 Sekunden");
SetTimerEx("close", 5000,false, "d", 1);
return 1;
}
else if(IsPlayerInRangeOfPoint(playerid,30.0,1529.67, -1545.20, 12.57))
{
MoveObject(torR,1529.67, -1545.20, 0.57, 4); //X bleibt gleich, Y bleibt gleich, Z wird kleiner als beim Erstellen
SendClientMessage(playerid,Rot,"Das Tor schließt in 5 Sekunden");
SetTimerEx("close", 5000,false, "d", 2);
return 1;
}
else
{
SendClientMessage(playerid,Rot,"Es ist kein Tor in der Nähe");
}
return 1;
}
return 0;
}
Ja, genau. Die erste Zahl verschiebt es zur Seite. Die letzte Zahl nach oben und unten.
Wie willst du es denn haben? Sollen sich die Tore auf die Seite bewegen, oder nach unten?
Willst du es selbst versuchen (die Koordinaten für beide Versionen hast du hier schon stehen), oder soll ich es dir machen?
Nein, tut mir leid. Skype nutze ich ausschließlich privat. Ich gebe meine Skype id nicht weiter, weil mich sonst jeden Tag dutzende Leute anschreiben würden. Das hatte ich schonmal, vor vielen Jahren mit xFire.
Wenn du Fragen hast, dann bitte ich dich die Fragen hier in der Scripting Base zu posten.
Danke
Zu den Fehlern:
Du musst bei den IsPlayerInRangeOfPoint die letzten 3 Parameter noch weg machen, das hier:
, 0.00, 0.00, 90.00
das gehört da nicht hin.
In dem Befehl steht das MoveObject weil es ja dort nach unten bewegt wird (du hast dort die Koordinaten noch nicht geändert!).
Dann wird der Timer gestartet, und nach 5 Sekunden bewegt es sich wieder nach oben.
Deshalb wird für jedes Tor 2x MoveObject benötigt.
Ich habe das geändert, weil das TorL ja bei 1517.89 erstellt wird. Wenn es sich nur nach unten bewegen soll, dann müssen die ersten beiden Zahlen unverändert bleiben, hinsichtlich der Erstellposition. Bei TorL habe ich es auch wieder zur Erstellposition (X und Y) zurückgeändert, da nur Z verändert wird, wenn es sich nach unten bewegt.
TeamSpeak nutze ich nicht, daher erkläre ich es dir hier:
Wenn sich das Tor nach unten bewegen soll, dann musst du
MoveObject(torL,1505.67, -1545.20, 12.571, 4);
zu
MoveObject(torL,1517.89, -1545.20, 0.571, 4);
ändern
und
MoveObject(torR,1541.67, -1545.20, 12.57, 4);
zu
MoveObject(torR,1529.67, -1545.20, 0.57, 4);
ändern.
Warum?
(id, X, Y, Z, Speed)
Zuvor hast du X geändert, also zur Seite.
Du musst aber Z ändern, also nach oben/unten.