Nützliche Codeschnipsel

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
  • @[BFX]Explosion Man könnte die Namen auf Deutsch machen, wie ich in meinem Fall. Wäre ein kleiner Vorteil bzw sieht besser aus.


    Dein Beispiel meinte ich damit gar nicht, dass war ok , kostet halt speicher aber verhindern kann man es sowieso nicht und es zahlt sich auch erst dann aus wenn es mehr als 3 mal verwendet wird aber manche Funktionen sind einfach unnötig wenn man sie ohnehin nur ein bis zwei mal wirklich aufruft. Ob es nun auf Deutsch da steht oder auf Englisch spielt für mich keine Rolle und den Compiler juckts auch nicht :D

    Mfg. BlackFoX_UD_ alias [BFX]Explosion


  • Habe ich im russischen Forum gefunden, ist zwar nicht wirklich nützlich aber witzig ist es alle male, vorallem mit dem russischen Akzent :D

    public OnPlayerText(playerid, text[])
    {
    AudioMessage(playerid,text);
    }


    stock AudioMessage(playerid, text[], lang[] = "ru")
    {
    new str[512];
    format(str, 512, "http://translate.google.kg/translate_tts?ie=UTF-8&q=%s&tl=%s&prev=input", text, lang);
    PlayAudioStreamForPlayer(playerid, str);
    return 1;
    }

    PS: Es sind auch andere Sprachen möglich. (bei lang einfach "de" eingeben für Deutsch)

  • Aber es gibt doch schon GetWeaponName. Warum also das Rad neu erfinden?^^


    Alter -,- ich habe hier extra im Forum nachgefragt ob es so eine Funktion gibt aber viele sagten da ne gibts nicht ....


    Naja wayne :(


    Edit: Jeffry: habe das extra mit nem Stock gemacht da die Neulinge besser damit anfangen als gleich das unübersichtliche mit den news :)
    Dazu wusste ich nicht das es sowas gab sehe oben :D


    Gruss

  • Edit: Jeffry: habe das extra mit nem Stock gemacht da die Neulinge besser damit anfangen als gleich das unübersichtliche mit den news :)
    Dazu wusste ich nicht das es sowas gab sehe oben :D


    Passt schon. Ich hab in meinem Code das auch mit einem stock drinne, finde ich persönlich besser, auch wenn es etwas langsamer ist.
    Für Anfänger ist es sicher besser mit einem stock zu arbeiten, es passieren dabei weniger ausschlaggebende Fehler, wenn man mal einen macht.
    Außerdem fand ich es gut, dass du den stock gepostet hast, hilfreich speziell auch für die, die die Waffennamen übersetzen wollen.


    ---------------------------------------------


    NiceMoney Funtkion:
    stock NiceMoney(money) //©Jeffry
    {
    new bmess[15];
    format(bmess, 15, "%d", money);
    if(money > 0)
    {
    for(new l=strlen(bmess)-3; l>0; l-=3)
    {
    if(l>0)
    {
    strins(bmess, ".", l);
    }
    }
    }
    else
    {
    for(new z=strlen(bmess)-3; z>1; z-=3)
    {
    if(z>1)
    {
    strins(bmess, ".", z);
    }
    }
    }
    return bmess;
    }


    Konvertiert 100000 zu 100.000, und gibt einen string zurück.


    Verwendung:
    printf("Mein Geld: %s€", NiceMoney(GetPlayerMoney(playerid)));

    3HZXdYd.png

    2 Mal editiert, zuletzt von Jeffry ()


  • Nein, das ist ein Tabsprung. Das Forum zeigt nur einen Tabsprung größer an als 4x Leerzeichen, in pawno ist das gleich. Ich arbeite eigentlich am PC immer mit TAB.
    Einfach mal den Code markieren, dann siehst du, dass es nur ein TAB ist.


    Okay hättest du evtl noch nützliche stocks die hier nicht gepostet wurden?
    Du hast ja immer etwas was ein verwundern kann :D

  • public TransformVehicle(Spieler,Fahrzeug)
    {
    if(IsPlayerInAnyVehicle(Spieler)){
    new Float:P[7],Fahrgestell,V=GetVehicleModel(Fahrzeug);
    GetPlayerPos(Spieler,P[0],P[1],P[2]);
    GetVehicleZAngle(GetPlayerVehicleID(Spieler),P[3]);
    GetVehicleVelocity(GetPlayerVehicleID(Spieler),P[4],P[5],P[6]);
    DestroyVehicle(GetPlayerVehicleID(Spieler));
    Fahrgestell=CreateVehicle(Fahrzeug,P[0],P[1],P[2]+1,P[3],-1,-1,-1);
    PutPlayerInVehicle(Spieler,Fahrgestell,0);
    SetVehicleVelocity(Fahrgestell,P[4],P[5],P[6]);
    }
    return true;
    }


    Ändert das Fahrzeug (z.B. von Fahrzeug X auf Infernus: TransformVehicle(playerid,411);) während der Fahrt.
    Fahrtgeschwindigkeit wird beibehalten.



    Beispiel-Video:

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.


    Advertising has us chasing cars and clothes, working jobs we hate so we can buy shit we don’t need.
    – Tyler Durden


    Sobald Werbung im Spiel ist, bist du, die Nutzerin, der Nutzer, das Produkt.


  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • Damit man unter Befehlen nicht immer per SendClientMessage(..., ..., "Du darfst das nicht tun (oder what ever)"); schreiben muss --> NichtBefugt(playerid);
    Selbe für "NichtVerbunden".

    stock NichtBefugt(playerid)
    {
    SendClientMessage(playerid, GRAU, "Du bist nicht befugt!");
    return 1;
    }


    stock NichtVerbunden(playerid)
    {
    SendClientMessage(playerid, GRAU, "Dieser Spieler ist nicht mit dem Spiel verbunden!");
    return 1;
    }

    Liebe Grüße


    Marcel


  • Dein Ernst ?


    schonmal was von Defines gehört
    NichtBefugt(%0) SendClientMessage(%0, GRAU, "Du bist nicht befugt!");
    NichtVerbunden(%0) SendClientMessage(%0, GRAU, "Dieser Spieler ist nicht mit dem Spiel verbunden!");


    Du kannst ja gern mal dein skript via #pragma compress 0 und öffne deine .amx danach mit einem hexeditor dann siehst mal die spannen an Opcodes mehr was dein code zurücklegen muss

  • //Timeban
    command(timeban, playerid, params[])
    {
    new string[128], reason[105], id, zeit;
    //Loggen
    new year, month, day;
    new hour,minute,second;
    getdate(year,month,day);
    gettime(hour,minute,second);
    if(sStats[playerid][pAdminlevel] < 2)
    return SendClientMessage(playerid, Rot, "Du bist kein Administrator oder dein Administratorenlevel ist zu niedrig!");
    if(GetPVarInt(playerid, "Adminduty") == 0)
    return SendClientMessage(playerid, Rot, "Du musst erst als Admin im Einsatz sein um andere Leute bannen zu können!");
    if(sscanf(params, "uds", id,zeit, reason))
    {
    SendClientMessage(playerid, Weiß, "Befehl: /timeban [Name/ID] [Zeit] [Grund]");
    SendClientMessage(playerid, Gelb, "Zeitangabe in Minuten.");
    return 1;
    }
    if(sStats[playerid][pAdminlevel] < 3 && zeit > 180)
    return SendClientMessage(playerid,Rot,"Du kannst den Spieler nur für max. 180 Minuten bannen!");
    if(id == playerid)
    return SendClientMessage(playerid,Rot,"Du kannst dich nicht selber bannen!");
    if(IsPlayerNPC(id))
    return SendClientMessage(playerid,Rot,"Du kannst keinen NPC/Bot bannen!");
    if(id == INVALID_PLAYER_ID)
    return SendClientMessage(playerid,Rot,"Dieser Spieler existiert nicht!");
    if(sStats[playerid][pAdminlevel] < sStats[id][pAdminlevel])
    return SendClientMessage(playerid, Rot, "Du kannst keinen Administrator bannen, welcher ein höheres Administratorenlevel hat wie du!");


    format(string, sizeof(string), "* Du wurdest vom Administrator %s für %d Minuten vom Server gebannt. Grund: %s", GetName(playerid),zeit, reason);
    SendClientMessage(id, Rot, string);
    format(string, sizeof(string), "* Spieler %s[%d] wurde vom Administrator %s für %d Minuten gebannt. Grund: %s", GetName(id),id, GetName(playerid),zeit, reason);
    SendClientMessageToAll(Rot, string);
    format(string,sizeof(string),"(%d/%d/%d) [%d:%d:%d] %s wurde vom Administrator %s fuer %d Minuten gebannt. Grund: %s",day,month,year,hour,minute,second,GetName(id),GetName(playerid),zeit,reason);
    BanLog(string);
    TogglePlayerControllable(id, false);
    sStats[id][pTimeBan] = gettime()+(60*zeit);
    SpielerSpeichern(id);
    SetTimerEx("KickTimer",1000,false,"i",id);
    return 1;
    }


    bei spielerladen:


    //Timeban
    if(gettime()<sStats[playerid][pTimeBan] && sStats[playerid][pTimeBan] > 0)
    {
    new days,hours,mins,string[800];
    new wartezeit = sStats[playerid][pTimeBan];
    new restzeit= wartezeit -gettime();
    days = floatround(restzeit / 86400,floatround_floor);
    hours = restzeit - (days * 86400);
    hours = floatround(hours / 3600,floatround_floor);
    mins = restzeit - ( (days * 86400) + (hours * 3600) );
    mins = floatround(mins / 60,floatround_floor);
    format(string, sizeof(string), "Du bist noch für %d Stunden und %d mins.",hours,mins);
    SendClientMessage(playerid, Rot,string);
    TogglePlayerControllable(playerid, false);
    SpielerSpeichern(playerid);
    SetTimerEx("KickTimer",1000,false,"i",playerid);
    return 1;
    }
    else
    {
    sStats[playerid][pTimeBan] = 0;
    }

  • if(strcmp("/namentag", cmdtext, true, 9) == 0)
    {
    new Text3D:label = Create3DTextLabel("Server Admin", 0xB4B4B4FF, 30.0, 40.0, 50.0, 40.0, 0);
    Attach3DTextLabelToPlayer(label, playerid, 0.0, 0.0, 0.3);
    return 1;
    }

  • Auch mal was kleines von mir:



    #define SetPlayerPosA(%0,%1,%2,%3,%4) SetPlayerPos(%0,%1,%2,%3); SetPlayerFacingAngle(%0,%4); SetCameraBehindPlayer(%0)
    #define GetPlayerPosA(%0,%1,%2,%3,%4) GetPlayerPos(%0,%1,%2,%3); GetPlayerFacingAngle(%0,%4)
    #define GetVehiclePosA(%0,%1,%2,%3,%4) GetVehiclePos(%0,%1,%2,%3); GetVehicleZAngle(%0,%4)
    #define SetVehiclePosA(%0,%1,%2,%3,%4) SetVehiclePos(%0,%1,%2,%3); SetVehicleZAngle(%0,%4)


    Diese Funktionen sind wirklich sehr klein, sparen aber irgendwann viel Platz und Tipparbeit.


    So funktioniert es:



    new Float:pos[4];
    GetPlayerPosA(playerid, pos[0], pos[1], pos[2], pos[3]);
    SetPlayerPosA(playerid, pos[0], pos[1], pos[2], pos[3]+10);


    GetVehiclePosA und SetVehiclePosA funktionieren analog dazu.


  • maddin warum nur format ? Für was gibt es die möglichkeit strcatzu nutzen oder das ganze in dem Fall direkt gleich zu setzen.
    case 0: wName="Fist";
    case 18: wName="Molotov Cocktail";
    case 44: wName="Night Vis Goggles";
    case 45: wName="Thermal Goggles";
    default: wName="Invalid Weapon Id";



    Das ganze hat optimierungspotenzial mit gepackten strings und stock const was zusätzlich den memory verbrauch reduziert bei der Benutzung.


    stock const WeaponNames[44][20 char] = {
    !"Unarmed",!"Brass Knuckles",!"Golf Club",!"Night Stick",!"Knife",!"Baseball Bat",!"Shovel",!"Katana",
    !"Chainsaw",!"Purple Dildo",!"White Dildo",!"Long White Dildo",!"White Dildo 2",!"Flowers",!"Cane",
    !"Grenades",!"Tear Gas",!"Molotovs",!"Pistol",!"Silenced Pistol",!"Desert Eagle",!"Shotgun",!"Sawn Off Shotgun",
    !"Combat Shotgun",!"Micro Uzi",!"Mac 10",!"MP5",!"AK47",!"M4",!"Tec9",!"Rifle",!"Sniper Rifle",!"RPG",!"Missile Launcher",
    !"Flame Thrower",!"Minigun",!"Sachel Charges",!"Detonator",!"Spray Paint",!"Fire Extinguisher",!"Camera",
    !"Nightvision Goggles",!"Thermal Goggles",!"Parachute"
    };

  • #define Set4BitBlock(%0,%1,%2) %0 |= %1<<(%2*4)
    #define Reset4BitBlock(%0,%1) %0 &= ~(0xF<<(%1*4))
    #define Compare4BitBlock(%0,%1,%2) (!!((%0)&(%1<<(%2*4))))


    xD ein bissle fun mit bit manipulation in dem fall kann man in einem integer 4 Bits reservieren
    also somit in einem integer 8 verschiedene werte von 0 - 15 unterbringen.
    Das ganze kann man auch erhöhen 8,16 bits oder verringern auf 1,2 bit/bits

  • Vll wissen es schon welche,vll auch nicht


    anstatt immer den Servernamen zu schreiben(bei Dialog z.b)
    kann man sie ja auch oben definieren


    #define SERVERNAME "Hallo"


    Wenn man dann den Namen verwenden will einfach [..."#SERVERNAME"..]