Problem mit Spawnsetzung + frage ob der Code funktioniert

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hey Leute,
    Derzeit versuche ich über Dialoge ein Spawnsystem umzusetzen. Dies beinhaltet Geschlechterwahl und Herkunftswahl. Bei der Frage nach der Herkunft möchte ich je nach Herkunft und Geschlecht einen Skin vergeben und den Spieler spawnen lassen.
    Derzeit habe ich die Geschlechter so weit fertig, dass ich bis Los Santos als Herkunftsauswahl gekommen bin.
    Ich speichere Infos via Dini (ich weiß Uralt und ressourcenfressend aber ich weigere mich (noch) DBs zu nutzen. Ich mag die einfach nicht... persönliche Abneigung)


    Nun zu meinen beiden Problemen: Trotz "SpawnPlayer" bleibt die von SA:MP vorgegebene Skinauswahl vorhanden und mein Skin wird, wenn ich auf "Spawn" klicke nicht geändert. Ebenso wollte ich fragen, ob meine Wenn Bedingung bezüglich des Geschlechtes so funktionieren kann.


    Hier der Code:


    case Herkunftsauswahl:
    {
    if(response)
    {
    new Frau[16];
    #pragma unused Frau
    if(dini_Float(spielerdatei, "Geschlecht")== format(SpielerInfo[playerid][Geschlecht], sizeof(Frau), "Weiblich"))
    {
    SetPlayerSkin(playerid, 12);
    }
    else SetPlayerSkin(playerid, 7);
    }
    SpawnPlayer(playerid);
    }

  • Deaktivier doch die Spawn Funktion, eventuell funktioniert es dann. Wird der Skin in der ini gespeichert und geladen ? Aber auch hier sei gesagt ich kann Nicht scripten, das was ich sage schließe ich einfach aus ner logischen Reihenfolge. Ein Versuch ist es wert ^^ trotzdem lasse ich mich einem besseren belehren.

  • if(dini_Float(spielerdatei, "Geschlecht")== format(SpielerInfo[playerid][Geschlecht], sizeof(Frau), "Weiblich"))
    Schau mal..Du liest "Geschlecht" als einen Gleitkomma-Wert aus. Das würde mich schon ein wenig stutzig machen ;)
    Dann kommt die eigentlich Abfrage. Du fragst ab, ob du dein Gleitkommawert dem Integer des Strings "Weiblich" gleichkommt.


    Ich würde es mal ganz anders probieren ;)

    if(dini_Int(spielerdatei,"Geschlecht") == 0)//0 == männlich, 1 == weiblich
    {
    SetPlayerSkin(playerid, 22);
    }
    else
    {
    SetPlayerSkin(playerid, 7);
    }
    }


    Die Abfrage erscheint für mich als deutlich logischer..
    Jedoch würde ich evtl. am Anfang (Connect des Spielers) die Variable in einen Integer packen, sodass du nichtmehr andauernd auslesen musst (stichwort perfomance!).
    Die Belegung der Variable musst doch halt ggf. noch deinen Verhältnissen anpassen.



    Hinweis: Keinen Kontakt über TeamViewer oder Skype !
    Grüßt den Fehlerklärbär von mir.
    Coming soon: Pawn-Café ( Concept-Sharing | Scripting-First-Aid )

  • Zum Einem heißt es dini_Int, wie schon magnussoft gesagt hat und zum Anderen hast du die geschweiften Klammern falsch gesetzt. Bei deinem else-Anweisung hat eine gefehlt.


    So sollte es funktionieren:
    case Herkunftsauswahl: {
    if(response) {
    new Geschlecht[16];
    Geschlecht = dini_Get(spielerdatei, "Geschlecht");
    strcat(SpielerInfo[playerid][Geschlecht], Geschlecht)
    if(Geschlecht == "Weiblich") {
    SetPlayerSkin(playerid, 12);
    }
    else {
    SetPlayerSkin(playerid, 7);
    }
    SpawnPlayer(playerid);
    }
    }

  • Wird denn das Geschlecht mit dem Namen in der Datei gespeichert oder mithilfe eines String, also als Text?


    Edit: Frage hat sich von selbst erledigt. Habe meinen vorherigen Quellcode angepasst. Nun sollte es funktionieren.

  • Zitat

    F:\GTA MOds\samp03x_svr_R2_win32\pawno\lol.pwn(580) : error 033: array must be indexed (variable "dini_Get")


    Ach manchmal demotiviert mich SAMP echt heftig :(
    Ich mach das so gern, aber es will einfach NICHTS auf anhieb so wie ich :/
    Ich versteh die Fehlermeldung auch nicht so ganz. Hatte die noch nie und mein Englisch reicht eig nur um den Code zu verstehn, die Fehlermeldungen nicht^^

  • Zitat

    F:\GTA MOds\samp03x_svr_R2_win32\pawno\lol.pwn(577) : error 047: array sizes do not match, or destination array is too small
    F:\GTA MOds\samp03x_svr_R2_win32\pawno\lol.pwn(579) : error 001: expected token: ";", but found "if"
    F:\GTA MOds\samp03x_svr_R2_win32\pawno\lol.pwn(579) : error 033: array must be indexed (variable "geschlechtstest")


    Die new Geschlecht[16]; Zeile ist 577, demnach folgend kannst du ja sehen.
    Ich experimentier damit mal rum, aber ich bin noch ratlos... bis auf den Semikolonfehler, den hab ich gefixt.


  • Ach manchmal demotiviert mich SAMP echt heftig :(
    Ich mach das so gern, aber es will einfach NICHTS auf anhieb so wie ich :/
    Ich versteh die Fehlermeldung auch nicht so ganz. Hatte die noch nie und mein Englisch reicht eig nur um den Code zu verstehn, die Fehlermeldungen nicht^^

    Wie wärs mit dem Posten des "neuem" Codes?
    Übrigens kannst du auch SetSpawnInfo nutzen dann überspringt er normalerweise die Skinauswahl.

  • Wie wärs mit dem Posten des "neuem" Codes?
    Übrigens kannst du auch SetSpawnInfo nutzen dann überspringt er normalerweise die Skinauswahl.


    Der Code den NeoFromBerlin geposted hat ist es.... also das da:
    case Herkunftsauswahl: {
    if(response) {
    new Geschlecht[16];
    Geschlecht = dini_Get(spielerdatei, "Geschlecht");
    strcat(SpielerInfo[playerid][Geschlecht], Geschlecht);
    if(Geschlecht == "Weiblich") {
    SetPlayerSkin(playerid, 12);
    }
    else {
    SetPlayerSkin(playerid, 7);
    }
    SpawnPlayer(playerid);
    }
    }

  • wie wär es mit
    if(strcmp(Geschlecht,"Weiblich",false)==0)
    {
    }

  • Keine Ahnung, ich spiele eben nen Ranglistenspiel in LoL (bin gerade im Ladebildschirm) und schau danach mal nach. Ergebnis editier ich dann in den Post hier rein.
    Edit:


    Habs eingebaut, kompiliert fehlerfrei. Allerdings habe ich "geschlecht" in "SpielerInfo[playerid][geschlecht]" geändert.

  • Also ich sehe es gleich auf den ersten blick.


    Du setzt erst den skin und dann lässt und ihn spawnen


    Aber du hast garkeine spawninfo festgelegt das heißt er benutzt die playerclass von onplayerequestclass


    Mach ihn die Felder rein:


    new Skin = GetPlayerSkin(playerid);


    dann SetSpawnInfo(playerid,0,Skin,X,Y,Z,R,W1,WA1,W2,WA2,W3,WA3);
    SpawnPlayer(playerid);