Beiträge von Hagi

    Das hier


    new playername[MAX_PLAYER_NAME];
    GetPlayerName(playerid,playername,MAX_PLAYER_NAME);
    new spielerdatei[64];
    format(spielerdatei,sizeof(spielerdatei),"/Spawns/%s.ini",playername);
    new Float:spawnx,Float:spawny,Float:spawnz;
    spawnx = dini_Float(spielerdatei,"SpawnX");
    spawny = dini_Float(spielerdatei,"SpawnY");
    spawnz = dini_Float(spielerdatei,"SpawnZ");
    SetPlayerPos(playerid,spawnx,spawny,spawnz);


    Unter OnPlayerSpawn


    Wenn die Spielerdatei existiert dann passiert folgendes.
    Der Spieler wird zum Klassenspawn geportet (Spawnen).
    Dann wird ausgelesen und der Spieler versetzt. Das dauert weniger als ne Sekunde und du bekommst gar nicht mit, dass du erst wo anders hingeportet wurdest.


    edit: Code verbessert. Da hab ich wohl einfach mal Fehler drin gehabt die ich selber schon verbessert hatte :D

    Da steht der Fehler doch


    [17:16:11] Loading plugin: streamer
    [17:16:11] Failed.


    Dein Plugin streamer scheint Fehlerhaft zu sein.
    bzw wenns nen linux Version ist muss in der cfg hinter streamer nen .so

    Sowas in der Art. Das hier steht in der a_samp.inc


    // Limits and internal constants
    #define MAX_PLAYER_NAME (24)
    #define MAX_PLAYERS (500)
    #define MAX_VEHICLES (2000)
    #define INVALID_PLAYER_ID (0xFFFF)
    #define INVALID_VEHICLE_ID (0xFFFF)
    #define NO_TEAM (255)
    #define MAX_OBJECTS (400)
    #define INVALID_OBJECT_ID (0xFFFF)
    #define MAX_GANG_ZONES (1024)
    #define MAX_TEXT_DRAWS (2048)
    #define MAX_MENUS (128)
    #define MAX_3DTEXT_GLOBAL (1024)
    #define MAX_3DTEXT_PLAYER (1024)
    #define MAX_PICKUPS (2048)
    #define INVALID_MENU (0xFF)
    #define INVALID_TEXT_DRAW (0xFFFF)
    #define INVALID_GANG_ZONE (-1)
    #define INVALID_3DTEXT_ID (0xFFFF)


    // Player GUI Dialog
    #define DIALOG_STYLE_MSGBOX 0
    #define DIALOG_STYLE_INPUT 1
    #define DIALOG_STYLE_LIST 2


    // States
    #define PLAYER_STATE_NONE (0)
    #define PLAYER_STATE_ONFOOT (1)
    #define PLAYER_STATE_DRIVER (2)
    #define PLAYER_STATE_PASSENGER (3)
    #define PLAYER_STATE_EXIT_VEHICLE (4) // (used internally)
    #define PLAYER_STATE_ENTER_VEHICLE_DRIVER (5) // (used internally)
    #define PLAYER_STATE_ENTER_VEHICLE_PASSENGER (6) // (used internally)
    #define PLAYER_STATE_WASTED (7)
    #define PLAYER_STATE_SPAWNED (8)
    #define PLAYER_STATE_SPECTATING (9)


    // Marker modes used by ShowPlayerMarkers()
    #define PLAYER_MARKERS_MODE_OFF (0)
    #define PLAYER_MARKERS_MODE_GLOBAL (1)
    #define PLAYER_MARKERS_MODE_STREAMED (2)


    // Weapons
    #define WEAPON_BRASSKNUCKLE (1)
    #define WEAPON_GOLFCLUB (2)
    #define WEAPON_NITESTICK (3)
    #define WEAPON_KNIFE (4)
    #define WEAPON_BAT (5)
    #define WEAPON_SHOVEL (6)
    #define WEAPON_POOLSTICK (7)
    #define WEAPON_KATANA (8)
    #define WEAPON_CHAINSAW (9)
    #define WEAPON_DILDO (10)
    #define WEAPON_DILDO2 (11)
    #define WEAPON_VIBRATOR (12)
    #define WEAPON_VIBRATOR2 (13)
    #define WEAPON_FLOWER (14)
    #define WEAPON_CANE (15)
    #define WEAPON_GRENADE (16)
    #define WEAPON_TEARGAS (17)
    #define WEAPON_MOLTOV (18)
    #define WEAPON_COLT45 (22)
    #define WEAPON_SILENCED (23)
    #define WEAPON_DEAGLE (24)
    #define WEAPON_SHOTGUN (25)
    #define WEAPON_SAWEDOFF (26)
    #define WEAPON_SHOTGSPA (27)
    #define WEAPON_UZI (28)
    #define WEAPON_MP5 (29)
    #define WEAPON_AK47 (30)
    #define WEAPON_M4 (31)
    #define WEAPON_TEC9 (32)
    #define WEAPON_RIFLE (33)
    #define WEAPON_SNIPER (34)
    #define WEAPON_ROCKETLAUNCHER (35)
    #define WEAPON_HEATSEEKER (36)
    #define WEAPON_FLAMETHROWER (37)
    #define WEAPON_MINIGUN (38)
    #define WEAPON_SATCHEL (39)
    #define WEAPON_BOMB (40)
    #define WEAPON_SPRAYCAN (41)
    #define WEAPON_FIREEXTINGUISHER (42)
    #define WEAPON_CAMERA (43)
    #define WEAPON_PARACHUTE (46)
    #define WEAPON_VEHICLE (49)
    #define WEAPON_DROWN (53)
    #define WEAPON_COLLISION (54)


    // Keys
    #define KEY_ACTION (1)
    #define KEY_CROUCH (2)
    #define KEY_FIRE (4)
    #define KEY_SPRINT (8)
    #define KEY_SECONDARY_ATTACK (16)
    #define KEY_JUMP (32)
    #define KEY_LOOK_RIGHT (64)
    #define KEY_HANDBRAKE (128)
    #define KEY_LOOK_LEFT (256)
    #define KEY_SUBMISSION (512)
    #define KEY_LOOK_BEHIND (512)
    #define KEY_WALK (1024)
    #define KEY_ANALOG_UP (2048)
    #define KEY_ANALOG_DOWN (4096)
    #define KEY_ANALOG_LEFT (8192)
    #define KEY_ANALOG_RIGHT (16384)


    #define KEY_UP (-128)
    #define KEY_DOWN (128)
    #define KEY_LEFT (-128)
    #define KEY_RIGHT (128)


    Kannst ja mal alle includes /Pawno/Includes durschaun. Überall wo nen #define steht kannst entweder den Wert oder den für den Wert representativen Ausdruck verwenden.
    Kannst dir natürlich auch selber #define (s) erstellen.
    #define string 256
    new string[string];

    da muss ich ma eben noch ne Information hinterherschieben.
    Die maximale Länge eines Names beträgt 20 Zeichen (chars)


    http://wiki.sa-mp.com/wiki/Limits


    Man kann auch alternativ einen String MAX_PLAYER_NAME Zellen zuweisen da MAX_PLAYER_NAME in der a_samp.inc so definiert ist.


    #define MAX_PLAYER_NAME (24)
    Würde bedeuten , dass es dann für z.B. new name[24] steht, was dasselbe wie new name[MAX_PLAYER_Name] ist.

    Hm bin mir nicht sicher, könnte aber auch am MYSQL liegen


    Zitat

    [16:50:03] MySQL-Verbindung konnte nicht hergestellt werden.
    [16:50:03] Zweiter Versuch ...
    [16:50:04] MySQL-Verbindung konnte nicht hergestellt werden.
    [16:50:04] Info: Der Server wird nun beendet.

    Stellt sich nur die Frage warum er mit dem Laden des Servers bis zum [16:50:13] Pickups Max = 100, Current Pickups = 83 kommt und danach crasht.

    Man benötigt nicht zwingent ein Register und Login System, da man den Spielernamen (die dini haißt genau so) auch ohne ein Loginsystem ermitteln kann.
    Wenn ein Spieler Connected gibt es folgende Möglichkeiten:


    a) Es existiert bereits eine dini Datei mit seinem Namen
    b) Es existiert noch keine


    Bei a): Die Datei wird geladen und das Geld und der Score werden ingame gesetzt.
    Bei b): Die Detei wird erstellt und der Spieler fängt von vorne an.


    Bei beiden wird beim disconnect gespeichert.


    Problem ist nur, dass dann jeder mit jedem Namen joinen kann und die Stats eines anderen "benutzen" kann.

    Da liegt der Fehler:
    [16:50:13] Script[gamemodes/irp.amx]: Run time error 4: "Array index out of bounds"


    Irgentwo in deinem Script liegt ein Fehler mit einem Array vor. Lass ma den Compiler über die .pwn laufen und schau ob er nen Error liefert.

    Irgentwo im Script musst du folgenden Timer haben


    SetTimer("serverNews",delay,1);


    Dieser wiederholt sich natürlich immer, da man sonst die Nachricht nur einmal pro Serverstart erhalten würde. Der Delay gibt dabei die Zeitintervalle zwischen den einzelnen Nachrichten an (Nachricht 1 und Nachricht 2).


    So wie ich das verstanden habe, bekommt man aber jede Nachricht mehr als nur einmal.
    Ich hab den Code jetzt mal untereinander geschrieben:



    public serverNews()
    {
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(gPlayerLogged[i]==1)
    {
    if(PlayerInfo[i][pAdmin]==0)
    {
    if(newswechsel == 1)
    {
    SendClientMessageToAll(COLOR_LIGHTBLUE,"|~~~~~~~~~~~~~~~~| Das Script |~~~~~~~~~~~~~~~~|");
    SendClientMessageToAll(COLOR_GRAD1," Dieses Script stammt von D4ywalk3r.");
    SendClientMessageToAll(COLOR_GRAD1, " Copyright by:: www.massive-dyamic-roleplay.de");
    SendClientMessageToAll(COLOR_LIGHTBLUE, "|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|");
    newswechsel = 2;
    return 1;
    }
    else if(newswechsel == 2)
    {
    SendClientMessageToAll(COLOR_LIGHTBLUE,"|~~~~~~~~~~~~~| Massive-Dynamic Roleplay|~~~~~~~~~~~~|");
    SendClientMessageToAll(COLOR_GRAD1, "Da der Server im Aufbau ist, kann es vorkommen");
    SendClientMessageToAll(COLOR_GRAD1, "das ihr einige Bugs vorfindet, meldet diese");
    SendClientMessageToAll(COLOR_GRAD1, "bitte sofort im /report oder im Forum!");
    SendClientMessageToAll(COLOR_GRAD1, "Forum: www.massive-dynamic-roleplay.de");
    SendClientMessageToAll(COLOR_LIGHTBLUE, "|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|");
    newswechsel = 1;
    return 1;
    }
    }
    }
    }
    return 1;
    }


    Der Fehler liegt darin, dass du per Schleife alle Spieler durchgehst die maximal auf dem Server sein können. Also 200 Durchläufe.
    Bei jedem durchlauf sendest du die Nachricht aber nicht an jeden Spieler einzeln sondern direkt an alle Spieler. Bedeutet wenn die Schleife Spieler 0 (Zähler = 0) durchläuft, bekommt jeder Spieler die Nachricht (SendClientMessageToAll (To All bedeutet alle)). Bei Spieler zwei dann wieder das gleiche usw.
    Also entweder die Schleife rausmachen oder jedem Spieler die Nachricht einzeln per SendClientMessage(playerid,color,string[]); senden.

    Warum dass denn nicht ?
    Wenn ein Spieler einen Dialog aufgerufen hat und einen der beiden Buttons drückt, wird das mit dem Callback OnDialogResponse beantwortet.
    Dieser verfügt über folgende Parameter:


    (playerid, dialogid, response, listitem, inputtext[])


    Unter Anderen ist auch die playerid desjenigen mitgeliefert, der den dialog beantwortet hat.
    Dann kannste die einfach verwenden under per GetPlayerName in eine Variable einlesen.


    Wenn du schon für den Dialog den Spielernamen brauchst geht das ebenfalls per GetPlayerName, da du für den Native ShowPlayerDialog ja sowieso die playerid brauchst.
    Dann einfach folgendes.

    new name[20];
    GetPlayerName(playerid,name,sizeof(name));
    new string[256];
    format(string,sizeof(string),"Spieler %s du hast diesen Dialog aufgerufen",name);
    ShowPlayerDialog(playerid,dialogid,DIALOG_STYLE_MSGBOX,"Testdialog",string,"Button 0","Button 1");

    ähm würd ich nicht machen. Wird ja nen Grund haben, auch wenns irgentein blöder ist, dass der Ordner unter data liegt. Wennde den da rauskopierst dann könnte das Probleme mit SAMP geben (Fehler beim starten usw.). Mach dir doch lieber ne Verknüpfung der savedpositions.txt.

    Leute genau andersrum



    if(listitem == 0)
    {
    if(GetPlayerMoney(playerid) < 20000)
    {
    return SendClientMessage(playerid,ROT,"Du hast nicht genug Geld!");
    }
    else
    {
    GivePlayerWeapon(playerid,30,9000);
    GivePlayerMoney(playerid,-20000); return 1;
    }
    }


    Wenn das Geld kleiner als 20k$ ist, dann soll die Message kommen. Ansonsten soll er die Waffe erhalten.