Beiträge von IPrototypeI

    Nett das du das Design releast,
    jedoch muss ich sagen das es mir besser
    ohne den weißen schein im background gefallen hat
    aber das ist wahrscheinlich Ansichtssache.


    Zusätzlich ist mir noch ein kleiner Fehler aufgefallen und zwar
    solltest du den Button im MainMenu weiter nach rechts schieben.


    das kann man via

    Code
    .mainMenu li.first a, .mainMenu li.firstActive a {
    	margin-left: 0;
    }


    machen jedoch kann das jeder so anpassen wie er will :D.


    Nochmals super Arbeit.

    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
    {
    if(ispassenger == 0)
    {

    for(new rl;rl<sizeof(Caddy);rl++)
    {
    if(Caddy[rl] == vehicleid && SpielerInfo[playerid][sLevel] > 2)
    {
    SetVehicleParamsForPlayer(Caddy[rl],playerid,0,1);
    return SendClientMessage(playerid,Farbe_Dunkelblau,"Du kannst dieses Fahrzeug nicht mehr Fahren!");
    }
    SetVehicleParamsForPlayer(Caddy[rl],playerid,0,0);
    }
    }
    return 1;
    }


    so sollte das passen das reseten wird dazu benötigt falls der spieler vom level zurück gesetzt wird und in der nähe des fahrzeug sich befindet

    Normal sollte der code durch das return abgebrochen werden jedoch kann ich mir nicht so wirklich vorstellen was du hier gemacht hast hast du eine extra funktion die wieder erneut aufgerufen wrid ?



    Zudem benutz doch die variante welche ich dir oben geschrieben habe.


    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
    {
    if(ispassenger == 0)
    {
    for(new rl;rl<sizeof(Caddy);rl++)
    {
    if(Caddy[rl] == vehicleid && SpielerInfo[playerid][sLevel] > 2)
    {
    SetVehicleParamsForPlayer(Caddy[rl],playerid,0,1);
    return SendClientMessage(playerid,Farbe_Dunkelblau,"Du kannst dieses Fahrzeug nicht mehr Fahren!");
    }
    }
    SetVehicleParamsForPlayer(Caddy[rl],playerid,0,0);
    }
    return 1;
    }

    Zum einen kannst du das über OnPlayerStateChange oder OnPlayerEnterVehicle machen, je nach dem wann du die Nachricht angezeigt haben möchtest wenn der spieler es versucht einzusteigen oder schon im Fahrzeug sitzt. Jedoch aufgrund deines codes bietet sich das eher an OnPlayerEnterVehicle zu nutzen


    Wie ErkSon schon mitgeteilt hat können ist hier kein SendClientMessage enthalten.


    public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
    {
    if(ispassenger == 0)
    {
    for(new rl;rl<sizeof(Caddy);rl++)
    {
    if(Caddy[rl] == vehicleid && SpielerInfo[playerid][sLevel] > 2)
    {
    return SetVehicleParamsForPlayer(Caddy[rl],playerid,0,1);
    }
    }
    SetVehicleParamsForPlayer(Caddy[rl],playerid,0,0);
    }
    return 1;
    }

    Das funktionier auch so nicht du musst den string formatieren mit format da ich mal nicht davon ausgehe das du eien gehookete funktion von SendClientMessage nutzt.


    zu dem muss carheal eine float sein sonst bekommst du ein tag mismatch warning.


    Der Platzhalter %.2f gibt nur 2 nachkommastellen aus


    ocmd:setcarheal(playerid,params[])
    {
    if(PlayerInfo[playerid][pAdmin] >= 4)
    {
    new car,Float:carheal,str[64];
    if(sscanf(params,"if",car,carheal)) return SendClientMessage(playerid,rot,"Benutzung: /setcarheal [FahrzeugID] [Fahrzeug Health]");
    SetVehicleHealth(car,carheal);
    format(str,64,"Du hast das Auto mit %.2f Carheal ausgerüstet",carheal);
    SendClientMessage(playerid,gelb,str,carheal);
    return 1;
    }
    SendClientMessage(playerid,rot,"Du hast nicht den nötigen Admin Rang!");
    return 1;
    }

    dan setz eine variable wenn der spieler gewürfelt hat und diese fragst du auch jeweils ab ob der andere spieler das schon gemacht hat.


    if(Wuerfeln[Wuerfeluser[playerid]]){
    Wuerfeln[Wuerfeluser[playerid]] = 0;
    ....
    return ....;
    }
    Wuerfeln[playerid] = 1;

    Zur Umsetzung und zu den Methoden um gewisse elemente zu detecten möchte ich nichts sagen jedoch gebe ich dir paar Verbesserungsmöglichkeiten mit.


    Angefangen mit den waffen:


    new Brass[MAX_PLAYERS],
    Golf[MAX_PLAYERS],
    NiteStick[MAX_PLAYERS],
    Knife[MAX_PLAYERS],
    BaseBall[MAX_PLAYERS],


    nutz doch ein enum
    enum Weapons {
    Brass,
    Golf,
    ---
    }


    new PlayerWeapons[MAX_PLAYERS][Weapons];


    das ist deutlich übersichtlicher und zum resetten erspart dir das enorm viel zeit im sinne von tipparbeit:


    for(new i; i != _:Weapons; ++i)PlayerWeapons[playerid][Weapons:i] = 0;



    Ich kann dir ja mal ein kleinen codeschnipsel da lassen von meiner detect weise von den waffen hacks

    new Waffen[13][2];
    for (new i=1; i != 13; ++i)
    {
    GetPlayerWeaponData(playerid, i, Waffen[i][0], Waffen[i][1]);
    if (1 <= Waffen[i][0] <= 18){
    if(!(AntiCheat[playerid][aWeapons1] & (1 << Waffen[i][0])))SendClientMessage(playerid,-1,"Du benutzt einen Waffencheat!");
    }
    else if (22 <= Waffen[i][0] <= 46){
    if(!(AntiCheat[playerid][aWeapons2] & (1 << (Waffen[i][0]-22))))SendClientMessage(playerid,-1,"Du benutzt einen Waffencheat!");
    }
    }


    so nebenssächlich sollte man noch erwähnen das switch + case schneller ist als if + else if

    Du kannst das ganze mit einem timer machen den du ausführst den lässt du 3 mal wiederholen würde so aussehen



    forward @Wuerfeln(player_1,player_2,points_1,points_2,round);
    @Wuerfeln(player_1,player_2,points_1,points_2,round) {
    new str[64],val[2];

    if(round == 4){
    if(points_1 > points_2)return SendClientMessage(player_1,-1,"Du hast gewonnen"),SendClientMessage(player_2,-1,"Du hast verloren");
    else if(points_1 == points_2)return SendClientMessage(player_1,-1,"Es steht unentschieden"),SendClientMessage(player_1,-1,"Du hast unentschieden");
    else if(points_1 < points_2)return SendClientMessage(player_1,-1,"Du hast verloren"),SendClientMessage(player_2,-1,"Du hast gewonnen");
    }
    val[0] = random(5)+1;
    val[1] = random(5)+1;
    format(str,64,"Du hast %d Punkte erwürfelt nun hast du %d Punkte",val[0],points_1+val[0]);
    SendClientMessage(player_1,-1,str);
    format(str,64,"Du hast %d Punkte erwürfelt nun hast du %d Punkte",val[1],points_2+val[1]);
    SendClientMessage(player_2,-1,str);
    SendClientMessage(player_1,-1,"Die nächste Runde beginnt");
    SendClientMessage(player_2,-1,"Die nächste Runde beginnt");
    return SetTimerEx("@Wuerfeln",3000,0,"ddddd",player_1,player_2,points_1+val[0],points_2+val[1],++round);
    }

    Nicht schlecht, wäre geil wenn du das Stadthallen gebäude auch mal neu Texturierst. Wäre mal was neues. ;)
    Sonst mal wieder eine Top Map von dir, war bestimmt nicht viel Arbeit und sieht Super aus!
    Da ruft doch glatt wieder mein Map Editor, bekomm ich doch wieder lust! :D


    Ich danke zunächst für dei ganzen Rückmeldungen.


    Es freut mich NewborN das ich dich zum Mappen begeistern konnte, wie siehts eigentlich mit deinem Autohaus aus :D. Ich werde mal schauen das ich das ganze mal umtexturieren werde, wie du schon erwähnt hast wird sich bestimmt eine gute Textur finden lassen.

    Ich möchte das die Funktion die Zahl die als erstes frei ist returnt wird.


    dann musst du dir eine extra variabel deklarieren und das ganze cachen um später auf den cache nochmal zurückzugeifen


    Beispiel:

    new Cache:fGetFreeSlot;
    #define UPDATE_CACHE() mysql_tquery(con_handler,"SELECT `id` FROM `frakcars`;","@SetCache","")


    forward @SetCache();
    @SetCache() {
    cache_delete(fGetFreeSlot);
    fGetFreeSlot = cache_save();
    return 1;
    }


    stock GetFreeSlot() {
    cache_set_active(fGetFreeSlot);
    new rows[2]
    cache_get_data(rows[0],rows[1]);
    for(new i; i != rows[0]; ++i)if(cache_get_row_int(i,0) != i)return i;
    return -1;
    }

    Das weiße bzw. die Textur passt überhaupt nicht in die Umgebung rein. Das einzigst gute ist das in der mitte, dieser Springbrunnen, aber diese Idee stammt von Shenzo.


    Nun gut würde ich nicht umbedingt behaupten es ist die selbe Struktur wie der Platz gegenüber des LSPDs und der Stadthalle und daher schon passend, jedoch an der Stelle mit dem Parkplatz da muss ich dir Recht geben dort sieht das mit dem Parkstreifen zusammen etwas blöd aus.


    Die Verwendung dieses Springbrunnens hat man das erste mal beim lieben Shenzo gesehen, da hast du Recht , dieses Anordnung des Brunnens entstammt jedoch von mir, daher würde ich mich grundsätzlich an deiner Stelle nicht wieder
    darauf berufen das alles geklaut sei. Diesen Themenpunkt würde ich jetzt mit dieser Aussage abhaken sonst zieht sich das wieder in eine endlose Diskussion.


    @Freaki° Ich weiß ja nicht auf was du dich so berufst ich kann ja gerne meine Maps von 2011- 2012 rausholen wo es bis auf das nebengebäude links fast genau so aussieht

    Schaut nicht schlecht aus. Zwar wurden diese Gebäude schon öfters benutzt, dennoch wurden sie recht schön angepasst.
    Das einzige was mich stört, ist der Brunnen am Anfang. Dort wo die Statue drauf steht. Dieser passt dort nicht wirklich hin. Der Platz könnte auch ein wenig mehr geschmückt sein. Der ist mir irgendwie ein wenig zu leer.



    Ja mit der leere hast du recht ich könnte ja paar bänke und bäume hinsetzen ich finde die statue doch ganz passend aber da sist ja Ansichtssache


    Danke nochmals für die positiven Rückmeldungen


    Wieso machst du dir das so umständlich und sendest jedesmal erneut ein query damit misshandelst du deine mysql verbindung.


    zum Thema Plugin von BlueG & Maddinat0r/Pain123


    mysql_tquery(con_handler,"SELECT `id` FROM `frakcars`;","@GetFreeSlot","");



    forward @GetFreeSlot();
    @GetFreeSlot() {
    new rows[2]
    cache_get_data(rows[0],rows[1]);
    for(new i; i != rows[0]; ++i)if(cache_get_row_int(i,0) != i){
    weiter code ...
    }
    }

    Der Fehler liegt daran, dass es in SA-MP keine vierdimensionalen Arrays gibt.


    Als kleine Infos dies ist kein 4 Dimensionales Array


    Das wäre eins


    new Array[10][10][10][10];


    und wird somit zu einem 3 dimensionalem array komprimiert.


    Beim enum ist es so das ein array nicht als array anerkannt wird sondern als gruppe, daher ist das was .Kevon hier macht möglich.


    Ein Grafik wo das ansichtlich erklärt:


    Danke für die positiven Rückmeldungen


    Chax ich hab mir sowieso gedacht das der 24/7 und die anderen gammligen gebäude bei solch einem prächtigen Gebäude etwas fehl am Platz sind, daher hab ich dort den Parkplatz und ein passendes Zusatzgebäude hingesetzt.



    @Syncid meinst du die Verwendung des Brunnens :D, damals wo du mir deine Map gezeigt hast haben mich diese wirklich sehr angetan, deshalb wollte ich auch mal einen verbauen.



    Zur Bodentextur:
    #define Boden(%0) SetDynamicObjectMaterial(%0, 0, 6048, "mall_law", "mono3_sfe",0xFFFFFFFF)


    //edit und falls du auf den Zaun zu sprechen kommst welchen du mal so ähnlich gestaltet hast da muss ich dich enttäuschen sowas habe ich schon vor rund 3 Jahren gemacht da hab ich noch eine mta 1.1 Map davon.