Wie füge ich das richtig ein?? @Kaliber
Lies nochmal meinen Text...
ich habe nirgends etwas von einer Gang Abfrage geschrieben...wieso schickst du mir das?! ![]()
Wie füge ich das richtig ein?? @Kaliber
Lies nochmal meinen Text...
ich habe nirgends etwas von einer Gang Abfrage geschrieben...wieso schickst du mir das?! ![]()
OnPlayerDeath überlist es die Gang/Mafia Mitglieder
2 Möglichkeiten:
Da du ja schon crashdetect geladen hast, zeig uns mal den server.log, da steht eine genauere Fehlerbeschreibung drinnen ![]()
Also es gibt hier viele Möglichkeiten das zu realisieren, aber mal hier eine ganz simple:
Und ich hab das mal mit Tab-Headers gemacht den Dialog, das finde ich schöner (Aber kannst auch nur DIALOG_LIST verwenden, das macht für den Code keinen Unterschied) ![]()
if(dialogid == 73)
{
if(!response) return 1;
if(listitem == 0)
{
new str[18*13] = "Waffenname\tSchuss",tmp[16],c;
for(new i,w,a; i < 13; i++)
{
GetPlayerWeaponData(playerid, i, w, a);
if(w > 0 && a > 0)
{
format(str, sizeof(str), "%s\n%s\t%d", str, WaffenNamen[w], a);
}
}
ShowPlayerDialog(playerid, 74, DIALOG_STYLE_TABLIST_HEADERS, "Waffen", str, "Auswählen", "Beenden");
return 1;
}
return 1;
}
if(dialogid == 74)
{
if(!response) return 1;
for(new i,w,a,c; i<13; i++)
{
GetPlayerWeaponData(playerid, i, w, a);
if(w > 0 && a > 0 && c++==listitem)
{
//Das ist die Waffe, die er ausgewählt hat
GivePlayerWeapon(playerid,w,a);
break;
}
}
return 1;
}
Alles anzeigen
Hier noch wenn du es hören magst ein kleiner Optimierungsvorschlag, die dialogid nicht mit if prüfen. Da der ja dann 74 if-Abfragen erstmal durchgehen muss, bis der zu deinem Dialog kommt und je mehr du noch machst, desto länger dauert das. Da 74 eine Konstante ist, kannst du hier mit switch arbeiten, was du unbedingt tun solltest, da das eine jumptable ist und der Code dann direkt dahin springt. Dann hast du nicht O(x), sondern O(1) und das ist natürlich wesentlich besser ![]()
O-Notation: https://de.wikipedia.org/wiki/…le#Beispiele_und_Notation
ob ich das Ganze hier jetzt richtig verstanden habe, aber müsste denke ich so gehen
Das ist so aus mehreren Gründen falsch:
Das Thema war (hoffentlich) schon erledigt, hatte ihm das eigentlich versucht ausführlich zu erklären in mehreren Posts.
Achso, dann geht auf deren Servern die Uhr falsch.
3 Möglichkeiten das jetzt zu beheben:
an was kann das liegen
Dein SA:MP-Server bezieht seine Uhrzeit von deinem Server (der dahinter steht).
Scheint so, als ob die Uhrzeit da falsch gehen würde, also einfach mal die synchronisieren ![]()
Ja und da ist dein Fehler...wenn die Länge stimmt, rufst du den Abschnitt auf, wo gesagt wird, dass es nicht stimmt...
Also musst du die Logik umkehren:
if(!(Kontonummer[playerid] >= 10000 && Kontonummer[playerid] <= 99999))
...ja, aber wie sieht der Code darunter aus.
Denn ich vermute, du hast eine umgekehrte Logik in deinem Code, sonst würden ja nur die Nummern zwischen 10.000 und 99.999 funktionieren...weil die Abfrage ist ja eindeutig ![]()
Jetzt gehen alle, außer Kontonummern, die 5 Zeichen lang sind
Wie sieht denn dein Code mit der Abfrage aus usw.
Und welche Pin-Nummer gibst du ein?
Da Jeffry dir zu Intgern geraten hat, kannst du keine Kontonummern benutzten, die mit 0 beginnen, also wirklich nur reine Zahlenwerte die größer als 10000 sind.
So fragst du ja auch ab, ob die Nummer kleiner 11111 und größer 99999 ist...das ist ja ein Widerspruch, das geht ja nicht xD
Meine Frage ist nun, wie hast du Kontonummer deklariert?
Komisch dass hier kaum einer auf sa-rl de (San Andreas Fun Reallife) gezockt hat ![]()
Waren lustige Zeiten damals, schade dass das Projekt inzwischen down ist ![]()
für mehr information von mein projekt al pm oder im ts.
Aber dann musst du ja jedem das selbe erzählen...und das mit Pech sehr oft.
Wäre es nicht sinniger, hier zu schreiben, was dein Projekt von allen anderen SA:MP Projekten unterscheiden wird? ![]()
Du wirst sicherlich eine gute Idee haben, wieso du dieses Projekt starten willst.
Ich lese mir gerne (so wie viele andere) solch Kreative Beiträge durch (sowas wirbt sehr).
Viel Erfolg anyway! ![]()
Ja, zeige den großen Sprite mal als erstes an und die anderen eben danach, dann sollte er im Hintergrund sein ![]()
Wieso verwendest du im Skript diese Koordinaten? Die sind falsch. (Schau auf die letzte, die Z-Achse ist komplett unterschiedlich, bei dem einen bist du in einem Interior, bei dem anderen am Boden!)
Nimm einfach die, die im Server Log stehen und es sollte alles klappen! ![]()
Naja, dann pack mal in die Abfrage, wo er das abbricht folgendes rein:
new Float:x,Float:y,Float:z;
GetPlayerPos(playerid,x,y,z);
printf("%.02f | %.02f | %.02f",x,y,z);
Dann kannst du ja einfach die Koordinaten die du eingetragen hast vergleichen, mit denen, wo er sich gerade befindet ![]()
Am besten auch mal hier beide dann posten ![]()
Also dein Fehler ist eigentlich nur, dass die Koordinaten in der Schleife falsch sind. Offensichtlich ist deine Bank in einem Interior.
Aber mein innerer Optimierer will das ordentlich machen, deshalb pack ich das mal in den Spoiler ![]()
Du brauchst keinen endlosen Timer, der permanent durch alle Spieler loopt.
Mach einfach einen direkten, sobald der Spieler die Bank ausraubt, schau:
(Also lösche deinen SetTimer und deinen public)
//Sowas lagert man immer besser aus:
stock CopsOnline(anzahl)
{
new c;
for(new i=GetPlayerPoolSize(); i!=-1; i--)
{
if(IsPlayerConnected(i) && Fraktion[Spieler[i][Frak]][Polizei] == 1) c++;
}
return c >= anzahl;
}
ocmd:bankrob(playerid, params[])
{
new cops, string[128];
if(Spieler[playerid][Level] < 3)return SendClientMessage(playerid, COLOR_GRAD1, "Das kannst du erst ab Level 3!");
if(!IsPlayerInRangeOfPoint(playerid, 6.0, 1424.3530,-1004.1053,1639.7909))return SendClientMessage(playerid, COLOR_GRAD1, "Du befindest dich nicht am Banktresor.");
if(Fraktion[Spieler[playerid][Frak]][Staat] == 1)return SendClientMessage(playerid, COLOR_GRAD1, "Du kannst als Beamter keine Bank ausrauben.");
if(gettime() < BankRobTime)return SendClientMessage(playerid, COLOR_GRAD1, "Die Bank wurde vor kurzem ausgeraubt, komm später wieder!");
if(!CopsOnline(2))return SendClientMessage(playerid, COLOR_GRAD1, "Es müssen mindestens 2 Beamte online sein!");
BankRobTime = gettime()+(120*120); // Erst in 2 Stunden wieder
GiveWanted("Niemand", playerid, "Bankraub", MAX_WANTEDBANKRAUB);
SendClientMessage(playerid, COLOR_RED, "Du hast ein Verbrechen begangen. (Bankraub) Reporter: Unbekannt");
format(string, sizeof(string), "HQ: %s (ID: %d) hat ein Verbrechen begangen: Bankraub, over.", Spieler[playerid][Name], playerid);
SendHQMessage(COLOR_DARKBLUE, string);
format(string, sizeof(string), "HQ: Reporter: Unbekannt, Aktuelles Wantedlevel: %d, over.", Spieler[playerid][Wanted]);
SendHQMessage(COLOR_DARKBLUE, string);
pIsRobbingBank[playerid] = 1;
pRobbingTimer[playerid] = 240;
format(string, sizeof(string), "%s raubt die Bank in Los Santos aus!", Spieler[playerid][Name]);
SendClientMessageToAll(COLOR_LIGHTBLUE, string);
SetTimerEx("OnPlayerBankRob",997,0,"i",playerid);
return 1;
}
public OnPlayerBankRob(playerid)
{
if(!pIsRobbingBank[playerid]) return 0;
new string[128];
if(!IsPlayerInRangeOfPoint(playerid, 30.0, 1424.3530,-1004.1053,1639.7909)) //<< Die Koordinaten sind jetzt die vom Tresorraum, evtl anpassen
{
pIsRobbingBank[playerid] = pRobbingTimer[playerid] = 0;
format(string, sizeof(string), "Bankräuber %s hat die Bank vorzeitig verlassen!", Spieler[playerid][Name]);
SendClientMessageToAll(COLOR_LIGHTBLUE, string);
SendClientMessage(playerid, COLOR_LIGHTBLUE, "Der Bank-Raub wurde abgebrochen.");
return 1;
}
pRobbingTimer[playerid] --;
switch(pRobbingTimer[playerid])
{
case 180: SendClientMessage(playerid, COLOR_LIGHTBLUE, "Noch 3 Minuten bis die Bank erfolgreich ausgeraubt wurde!");
case 120: SendClientMessage(playerid, COLOR_LIGHTBLUE, "Noch 2 Minuten bis die Bank erfolgreich ausgeraubt wurde!");
case 60: SendClientMessage(playerid, COLOR_LIGHTBLUE, "Noch 1 Minute bis die Bank erfolgreich ausgeraubt wurde!");
case 0: {
new preis = randomex(20000, 80000);
format(string, sizeof(string), "%s hat erfolgreich die Bank ausgeraubt. ($%d)", Spieler[playerid][Name], preis);
SendClientMessageToAll(COLOR_LIGHTBLUE, string);
GivePlayerMoney(playerid, preis);
SendClientMessage(playerid, COLOR_LIGHTBLUE, "Nun sieh zu, dass du hier abhaust!");
pIsRobbingBank[playerid] = pRobbingTimer[playerid] = 0;
Server[Staatskasse] -= preis;
}
}
SetTimerEx("OnPlayerBankRob",997,0,"i",playerid);
return 1;
}
Alles anzeigen
Jetzt hatte ich dir gerade geantwortet ![]()
GUI_Login[playerid][1] = CreatePlayerTextDraw(playerid, 326, 258.166687, "usebox");
PlayerTextDrawLetterSize(playerid, GUI_Login[playerid][1], 0.000000, 2.470367);
PlayerTextDrawAlignment(playerid, GUI_Login[playerid][1], 1);
PlayerTextDrawColor(playerid, GUI_Login[playerid][1], 0);
PlayerTextDrawUseBox(playerid, GUI_Login[playerid][1], true);
PlayerTextDrawBoxColor(playerid, GUI_Login[playerid][1], 102);
PlayerTextDrawSetShadow(playerid, GUI_Login[playerid][1], 0);
PlayerTextDrawSetOutline(playerid, GUI_Login[playerid][1], 0);
PlayerTextDrawFont(playerid, GUI_Login[playerid][1], 0);
PlayerTextDrawTextSize(playerid, GUI_Login[playerid][1], 447, 20);
PlayerTextDrawSetSelectable(playerid, GUI_Login[playerid][1], true);
PlayerTextDrawShow(playerid,GUI_Login[playerid][1]);
GUI_Login[playerid][2] = CreatePlayerTextDraw(playerid, 326, 311.250000, "usebox");
PlayerTextDrawLetterSize(playerid, GUI_Login[playerid][2], 0.000000, 2.405555);
PlayerTextDrawTextSize(playerid, GUI_Login[playerid][2], 447, 2.405555);
PlayerTextDrawAlignment(playerid, GUI_Login[playerid][2], 1);
PlayerTextDrawColor(playerid, GUI_Login[playerid][2], 0);
PlayerTextDrawUseBox(playerid, GUI_Login[playerid][2], true);
PlayerTextDrawBoxColor(playerid, GUI_Login[playerid][2], 102);
PlayerTextDrawSetShadow(playerid, GUI_Login[playerid][2], 0);
PlayerTextDrawSetOutline(playerid, GUI_Login[playerid][2], 0);
PlayerTextDrawFont(playerid, GUI_Login[playerid][2], 0);
PlayerTextDrawTextSize(playerid, GUI_Login[playerid][2], 447, 20);
PlayerTextDrawSetSelectable(playerid, GUI_Login[playerid][2], true);
PlayerTextDrawShow(playerid,GUI_Login[playerid][2]);
Alles anzeigen
Kannst ja mal n Blick darauf werden, falls es doch noch Unklarheiten geben sollte ![]()
Mal eine doofe Frage, kann nur ein Spieler die Bank gleichzeitig ausrauben, also gibt es immer nur einen aktiven Bankräuber? ![]()