Zufalls Spawn???

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
  • Hi ich habe ja ein DM/race/stunt/freeroom server aber jetzt habe ich ja paar DM Plätze gemacht wie kann ich jetzt machen das es nicht immer ein spawn punkt gibt sondern mehrere 4 oder 6


    hier ist mein code den ich gerade drin habe

    if (strcmp(cmdtext, "/dmkatana1", true)==0)
    {
    SetPlayerPos(playerid,2981.2773,259.6073,86.3154);
    SendClientMessage(playerid,COLOR_WHITE,"Du wurdest zum Katana Match Geportet");
    ResetPlayerWeapons(playerid);
    GivePlayerWeapon(playerid,8,5000);
    return 1;
    }


    kann mir einer sagen wie es geht das auch dann zufällige spawns sind xD


    MFG: ScorpX

  • Des LVDM Script ist ein Standart Script, sollte in deinem GameMode Ordner drin sein.


    Hier ist mal des gesuchte aus dem LVDM:
    new Float:gRandomPlayerSpawns[28][3] = // Format von diesem New ist: Name[Anzahl der Koordinaten][Wie viele Koordinaten es sind.]
    {
    {1958.3783,1343.1572,15.3746},//3 Koordinaten sind es immer {X,Y,Z},
    {2199.6531,1393.3678,10.8203},
    {2483.5977,1222.0825,10.8203},
    {2637.2712,1129.2743,11.1797},
    {2000.0106,1521.1111,17.0625},
    {2024.8190,1917.9425,12.3386},
    {2261.9048,2035.9547,10.8203},
    {2262.0986,2398.6572,10.8203},
    {2244.2566,2523.7280,10.8203},
    {2335.3228,2786.4478,10.8203},
    {2150.0186,2734.2297,11.1763},
    {2158.0811,2797.5488,10.8203},
    {1969.8301,2722.8564,10.8203},
    {1652.0555,2709.4072,10.8265},
    {1564.0052,2756.9463,10.8203},
    {1271.5452,2554.0227,10.8203},
    {1441.5894,2567.9099,10.8203},
    {1480.6473,2213.5718,11.0234},
    {1400.5906,2225.6960,11.0234},
    {1598.8419,2221.5676,11.0625},
    {1318.7759,1251.3580,10.8203},
    {1558.0731,1007.8292,10.8125},
    {-857.0551,1536.6832,22.5870},
    {817.3494,856.5039,12.7891},
    {116.9315,1110.1823,13.6094},
    {-18.8529,1176.0159,19.5634},
    {-315.0575,1774.0636,43.6406},
    {1705.2347,1025.6808,10.8203}//Wenn du Nachzählst sind es genau 28 wie oben steht
    };


    So jetzt musst du noch bei dir eine Random ein bauen, des funktioniert so (ich nimm grad deins)

    if (strcmp(cmdtext, "/dmkatana1", true)==0)
    {
    new rand = random(sizeof(gRandomPlayerSpawns));// es erstellt eine neue Variable "rand", in der zufällig(random) eine Zeile aus gRandomPlayerSpawns genommen wird.
    SetPlayerPos(playerid,gRandomPlayerSpawns[rand][0],gRandomPlayerSpawns[rand][1],gRandomPlayerSpawns[rand][2]);//es nimmt hier, aus der Variable "gRandomPlayerSpawn", eine zufäälig gewählte Zeile, und von der die erste Zahl (0 = 1., 1 = 2., 2 = 3. Zahl)
    SendClientMessage(playerid,COLOR_WHITE,"Du wurdest zum Katana Match Geportet");
    ResetPlayerWeapons(playerid);
    GivePlayerWeapon(playerid,8,5000);
    return 1;
    }


    Ich hoffe ich konnte dir damit helfen.
    MfG Sc4uT

  • ok geht jetzt :D aber wie soll ich jetzt machen wenn ich 2 verschiedene DM´s habe also


    if (strcmp(cmdtext, "/dm1", true)==0)
    {
    SetPlayerPos(playerid,2981.2773,259.6073,86.3154);
    SendClientMessage(playerid,COLOR_WHITE,"Du wurdest zum Katana Match Geportet");
    ResetPlayerWeapons(playerid);
    GivePlayerWeapon(playerid,8,5000);
    return 1;
    }


    if (strcmp(cmdtext, "/dm2", true)==0)
    {
    SetPlayerPos(playerid,468.6135,-2380.7131,10.4887);
    SendClientMessage(playerid,COLOR_WHITE,"Du wurdest zum EKZ Match Geportet");
    ResetPlayerWeapons(playerid);
    GivePlayerWeapon(playerid,31,5000);
    GivePlayerWeapon(playerid,29,2500);
    GivePlayerWeapon(playerid,25,200);
    return 1;
    }


    wenn ich es dann einfüge wird es dann nicht wenn ich /dm1 mache dann zum 2 DM geportet?


    ich habe es so versucht wie blackfox gesagt hat und es hat funktioniert jetzt habe ich nochwas anderes versucht und jetzt kommt dieser fehler


    C:\Dokumente und Einstellungen\Bauer\Desktop\Artur\Touch-SAMP Server\gamemodes\Touch-LVDM.pwn(381) : error 032: array index out of bounds (variable "poz")
    C:\Dokumente und Einstellungen\Bauer\Desktop\Artur\Touch-SAMP Server\gamemodes\Touch-LVDM.pwn(391) : error 032: array index out of bounds (variable "poz")
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    2 Errors.


    und die .AMX datei ist weg diese codes habe ich eingefügt


    die als befehl:
    if (strcmp(cmdtext, "/dm1", true)==0)
    {
    new rnd = random(sizeof poz);
    SetPlayerPos(playerid,poz[rnd][0],poz[rnd][1],poz[rnd][2],poz[rnd][3],poz[rnd][4],poz[rnd][5]);
    SendClientMessage(playerid,COLOR_WHITE,"Du wurdest zum Katana Match Geportet");
    ResetPlayerWeapons(playerid);
    GivePlayerWeapon(playerid,8,5000);
    return 1;
    }


    if (strcmp(cmdtext, "/dm2", true)==0)
    {
    new rnd = random(sizeof poz);
    SetPlayerPos(playerid,poz[rnd][6],poz[rnd][7],poz[rnd][8],poz[rnd][9],poz[rnd][10],poz[rnd][11]);
    SendClientMessage(playerid,COLOR_WHITE,"Du wurdest zum EKZ Match Geportet");
    ResetPlayerWeapons(playerid);
    GivePlayerWeapon(playerid,31,5000);
    GivePlayerWeapon(playerid,29,2500);
    GivePlayerWeapon(playerid,25,200);
    return 1;
    }


    und hier die Positionen:
    new Float:poz[][] = {
    {3000.9119,198.4665,89.7790},
    {3001.2493,199.5047,95.9141},
    {2981.2773,259.6073,86.3154},
    {2980.2275,211.9329,101.4460},
    {2996.7981,205.9718,103.7188},
    {3014.4431,194.2263,92.4197},
    {468.6135,-2380.7131,10.4887},
    {487.7625,-2405.1323,10.7820},
    {486.6236,-2425.6177,10.7888},
    {483.5650,-2443.2947,10.7780},
    {457.9507,-2412.1216,10.7966},
    {464.5287,-2432.4907,10.7714}
    };


    was ist daran falsch?

  • Stichwort Array , eine Tabelle mit mehreren Werten oder auch Dimensionen


    new poz[]/*Dimension 1*/[]/*Dimension 2*/ =
    // Dimension 1
    {/*Feld für Dimension 2*/},
    {/*weiteres Feld für Dim 2*/}
    }; // Ende Dimension 1


    poz[0] /* Feld 0 in Dim1 */[1] /* Feld 1 in Dimension 2 das in Dimension 1 Feld 0 existiert */

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Schau dir deine Zugriffe mal an...


    new Float:poz[][] = {
    {x,y,z}
    };

    du greifst von Zufall ,der richtig ist, auf das richtige Feld zu ABER du greifst auf Felder zu die nicht existieren, es gibt 3 Felder ( 0,1,2 ) auf die du zugreifen kannst,
    dein Zugriff weitet sich hier auf 5 aus ...

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • Beispiel (Koordinaten sind ausgedacht):
    new Float:posdm1[][]={
    {485.4547,548.45646,215.687465},
    {74.132486,894.2341,14.163},
    };
    new Float:posdm2[][]={
    {564.464,489.56,465.1656},
    {456.46,165.489,156.46},
    };
    Dann hast du halt deine Spawns:
    //für DM1:
    new a=random(sizeof(posdm1));
    SetPlayerPos(playerid,posdm1[a][0],posdm1[a][1],posdm1[a][2]);
    //und für DM2:
    new a=random(sizeof(posdm2));
    SetPlayerPos(playerid,posdm2[a][0],posdm2[a][1],posdm2[a][2]);
    Ich hoffe, ich konnte es verständlich genug erklären

  • da kommen aber jetzt warning´s und die AMX datei ist weg xD


    C:\Dokumente und Einstellungen\Bauer\Desktop\Artur\Touch-SAMP Server\gamemodes\Touch-LVDM.pwn(125) : error 029: invalid expression, assumed zero
    C:\Dokumente und Einstellungen\Bauer\Desktop\Artur\Touch-SAMP Server\gamemodes\Touch-LVDM.pwn(125) : error 008: must be a constant expression; assumed zero
    C:\Dokumente und Einstellungen\Bauer\Desktop\Artur\Touch-SAMP Server\gamemodes\Touch-LVDM.pwn(129) : error 029: invalid expression, assumed zero
    C:\Dokumente und Einstellungen\Bauer\Desktop\Artur\Touch-SAMP Server\gamemodes\Touch-LVDM.pwn(129) : error 008: must be a constant expression; assumed zero
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    4 Errors.


    hier das habe ich eimgefügt


    new Float:posdm1[][]={
    {3000.9119,198.4665,89.7790},
    {2980.2275,211.9329,101.4460},
    };
    new Float:posdm2[][]={
    {464.5287,-2432.4907,10.7714},
    {486.6236,-2425.6177,10.7888},
    };


    if (strcmp(cmdtext, "/dm1", true)==0)
    {
    new a=random(sizeof(posdm1));
    SetPlayerPos(playerid,posdm1[a][0],posdm1[a][1],posdm1[a][2]);
    SendClientMessage(playerid,COLOR_WHITE,"Du wurdest zum Katana Match Geportet");
    ResetPlayerWeapons(playerid);
    GivePlayerWeapon(playerid,8,5000);
    return 1;
    }


    if (strcmp(cmdtext, "/dm2", true)==0)
    {
    new a=random(sizeof(posdm2));
    SetPlayerPos(playerid,posdm2[a][0],posdm2[a][1],posdm2[a][2]);
    SendClientMessage(playerid,COLOR_WHITE,"Du wurdest zum EKZ Match Geportet");
    ResetPlayerWeapons(playerid);
    GivePlayerWeapon(playerid,31,5000);
    GivePlayerWeapon(playerid,29,2500);
    GivePlayerWeapon(playerid,25,200);
    return 1;
    }


    was ist da jetzt der fehler?

  • Ops, hab da was mit enum verwechselt... hier kommt an das letzte Segment ja kein Komma...
    new Float:posdm1[][]={
    {3000.9119,198.4665,89.7790},
    {2980.2275,211.9329,101.4460}
    };
    new Float:posdm2[][]={
    {464.5287,-2432.4907,10.7714},
    {486.6236,-2425.6177,10.7888}
    };