Sorry, ich verbessere mich^^
Bei deiner Version ist diese Verbesserung nicht nötig.
Nützliche Codeschnipsel
- breadfish
- Geschlossen
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
-
-
Habe mal aus Langerweile eine Funktion erstellt,
wo Kennzeichen Automatisch erstellt werden.
Die Abfrage bezieht sich nach 3 werten
Sprich wenn ihr ein Auto erstellt das in LS steht, dann beginnt das kennzeichen mit LS
Der rest kommt per zufall z.B.
LS-BA 123
so ein kennzeichen kann sich dann erstellen
Verwendung:
new car = CreateVehicle(....);
CreateRandoomNumplate(car);Der Code stock CreateRandoomNumplate(vehicle)
{
new numtext[40],vornumber[5],b1[5],b2[5],other[10],rand1=random(26),rand2=random(26),Float:x,Float:y,Float:z;
GetVehiclePos(vehicle, x, y, z);
if((x > -992.5172 && x < 4000.0000) && (y < 528.0000 && y > -4000.0000))vornumber="LS";
if((x > -4000.0000 && x< -992.5172) && (y < 4000.0000 && y > -4000.0000))vornumber="SF";
if((x > -992.5172 && x< 4000.0000) && (y < 4000.0000 && y > 528.0000))vornumber="LV";
switch(rand1)
{
case 0:{b1="A";}case 1:{b1="B";}case 2:{b1="C";}case 3:{b1="D";}case 4:{b1="E";}case 5:{b1="F";}case 6:{b1="G";}case 7:{b1="H";}case 8:{b1="I";}case 9:{b1="J";}
case 10:{b1="K";}case 11:{b1="L";}case 12:{b1="M";}case 13:{b1="N";}case 14:{b1="O";}case 15:{b1="P";}case 16:{b1="Q";}case 17:{b1="R";}case 18:{b1="S";}
case 19:{b1="T";}case 20:{b1="U";}case 21:{b1="V";}case 22:{b1="W";}case 23:{b1="X";}case 24:{b1="Y";}case 25:{b1="Z";}
}
switch(rand2)
{
case 0:{b2="A";}case 1:{b2="B";}case 2:{b2="C";}case 3:{b2="D";}case 4:{b2="E";}case 5:{b2="F";}case 6:{b2="G";}case 7:{b2="H";}case 8:{b2="I";}case 9:{b2="J";}
case 10:{b2="K";}case 11:{b2="L";}case 12:{b2="M";}case 13:{b2="N";}case 14:{b2="O";}case 15:{b2="P";}case 16:{b2="Q";}case 17:{b2="R";}case 18:{b2="S";}
case 19:{b2="T";}case 20:{b2="U";}case 21:{b2="V";}case 22:{b2="W";}case 23:{b2="X";}case 24:{b2="Y";}case 25:{b2="Z";}
}
format(other,10,"%s%s",b1,b2);
format(numtext,40,"%s-%s %d",vornumber,other,random(999));
SetVehicleNumberPlate(vehicle,numtext);
return 1;
}
Zwar klein aber für manche RP oder Reallife Server ist es gebrauchbarViel spaß damit
-
Schick Schick ;D
-
Nice, bin grad schule, bau des nachher in mein Script ein
-
Habe mal aus Langerweile eine Funktion erstellt,
wo Kennzeichen Automatisch erstellt werden.
Die Abfrage bezieht sich nach 3 werten
Sprich wenn ihr ein Auto erstellt das in LS steht, dann beginnt das kennzeichen mit LS
Der rest kommt per zufall z.B.
LS-BA 123
so ein kennzeichen kann sich dann erstellen
Verwendung:
PAWN Quelltext1
2new car = CreateVehicle(....);
CreateRandoomNumplate(car);Der Code
Zwar klein aber für manche RP oder Reallife Server ist es gebrauchbar
Viel spaß damit
das hättest du auch eleganter lösen können
new Zeichen[26][] = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
stock CreateRandoomNumplate(vehicle)
{
new numtext[20],Float:Pos[3];
GetVehiclePos(vehicle, Pos[0], Pos[1],Pos[2]);
format(numtext,20,"%s-%s%s %d",((Pos[0] > -992.5172 && Pos[0] < 4000.0000) && (Pos[1] < 528.0000 && Pos[1] > -4000.0000)?("LS"):((Pos[0] > -4000.0000 && Pos[0]< -992.5172) && (Pos[1] < 4000.0000 && Pos[1] > -4000.0000)?("SF"):((Pos[0] > -992.5172 && Pos[0]< 4000.0000) && (Pos[1] < 4000.0000 && Pos[1] > 528.0000)?("LV"):("CS")))),Zeichen[random(25)],Zeichen[random(25)],random(999));
SetVehicleNumberPlate(vehicle,numtext);
return numtext;
}zu dem ist die verwendung von switch langsamer als else if jedoch ist der Ternäre Operator schneller als else if da nix initaliziert werden muss zu dem
benutz arrays diese kosten weniger memory und verkleinere auch die strings verringert auch den memory verbrauch und warum alles einzelt wenn es auch so geht
nur 1 mal formatieren format ist langsam daher versucht man dies so wenig wie möglich zu verwenden.//edit neu zitiert zu dem kannst du bestimmt noch einiges lernen wenn du mal mein tutorial durchlesen würdest
-
das hättest du auch eleganter lösen können
Jetzt wo du es wieder sagst stimmt^^
Nachtarbeit halt da kommen immer umständliche dinge ans tageslicht -
Returned den kleinste bzw. größten Wert aller eingegebenen Integer.
stock findmax(...)
{
new count=numargs(),num=getarg(0);
if(count==1) return num;
for(new i=1;i<count;i++) if(getarg(i)>num) num=getarg(i);
return num;
}stock findmin(...)
{
new count=numargs(),num=getarg(0);
if(count==1) return num;
for(new i=1;i<count;i++) if(getarg(i)<num) num=getarg(i);
return num;
} -
Ich will auch etwas preisgeben undzwar für Medics einen /heal und zum annehmen /accept
ihr braucht dazu das include ocmd und sscanf ich benutze das include von sscanf also schreibe ich oben #include <sscanf> wieso sscanf? ich habe den sscanf text in eine textdatei kopiert und es erfüllt den selben zewck
also oben im script:
#include <a_samp>
#include <sscanf>
#include <ocmd>new heal[MAX_PLAYERS]; //Das ist die Variabele dazu später mehr.
gut unter OnPlayerCommandText:
if(strcmp(cmdtext,"/accept",true) == 0)
{
if(heal[playerid] == 1) //Hier ist die Variabele die was erst mit den /heal befehl aktiviert wird.
{
new pID, string[128],string2[128];//2 strings die brauchen wir für den format
format(string,sizeof(string),"Sie wurden erfolgreich von %s geheilt",SpielerName(pID));//hier wird string1 formatiert
SendClientMessage(playerid,Türkis,string);//dort string 1 abgestendet
format(string2,sizeof(string2),"Du hast erfolgreich %s für 150$ geheilt",SpielerName(playerid));//hier string2 formatiert
SendClientMessage(playerid,Türkis,string2);//und hier string2 abgesendet
GivePlayerMoney(pID,150);//Der was den befehl /heal ausgeführt hat bekommt dieses geht 150$
GivePlayerMoney(playerid,-150);//Der was geheilt wird bekommt 150$ abgezogen
heal[pID] = 0;//Und hier wird die variabele wieder auf 0 gesetzt das sie benutzt wurde
}
else
{
SendClientMessage(playerid,Grau,"Du hast keine Healanfrage bekommen!");//dashier wird angezeigt wenn keiner zuvor den /heal befehl ausgeführt hat
}
}so möglichts weit unten im script kommt nun der /heal befehl als ocmd wir beginnen mit dem grundgerüst
ocmd:heal(playerid,params[])
{
return 1;
}
das sieht dan so ausnun wollen wir das es nur Medics oder admins können ich benutze hierzu enums... ihr müsstest also nur die fraktions abfrage ändern.
ocmd:medheal(playerid,params[])
{
if(PlayerInfo[playerid][pMember] == 3||PlayerInfo[playerid][pLeader] == 3)//Dashier ist die Fraktions abfrage ändert sie in eure
{
new pID;//dashier ist die partner id also der was geheilt werden soll
if(sscanf(params,"u",pID))return SendClientMessage(playerid,Grau,"Benutzung: /medheal [ID]");//dashier ist der sscanf code der bewirk das er eine ID auswählt..
{
new string[128];hier ein string dazu gleich mehr
format(string,sizeof(string),"%s:Ich will dich %s für 150$ heilen, nehme die Anfrage mit /accept heal an.",SpielerName(playerid),SpielerName(pID));bei diesem string wird angezeit wer wen heilt
SendClientMessage(pID,Weiss,string);hier wird unser string abgeschickt
SendClientMessage(playerid,Grau,"Healanfrage verschickt");und da wird bestätigt das es abgeschikt wurde
heal[pID] = 1;//Dashier ist unsere goldene Variabale :)
}
}
return 1;
}jetzt noch auch ganz unten einen stock SpielerName(playerid) damit wir unseren Spielernamen herrausfinden das ist ganz einfach
//SpielerName-Stock
stock SpielerName(playerid)
{
new GetName[MAX_PLAYER_NAME];
GetPlayerName(playerid,GetName,sizeof(GetName));//hier wird der name herrausgefunden und dan in SpielerName gepackt
return GetName;
}und das wars ich hoffe ich konnte euch hilfreich sein!
-
Ich will auch etwas preisgeben undzwar für Medics einen /heal und zum annehmen /accept
ihr braucht dazu das include ocmd und sscanf ich benutze das include von sscanf also schreibe ich oben #include wieso sscanf? ich habe den sscanf text in eine textdatei kopiert und es erfüllt den selben zewck
also oben im script:
#include
#include
#includenew heal[MAX_PLAYERS]; //Das ist die Variabele dazu später mehr.
gut unter OnPlayerCommandText:
if(strcmp(cmdtext,"/accept",true) == 0)
{
if(heal[playerid] == 1) //Hier ist die Variabele die was erst mit den /heal befehl aktiviert wird.
{
new pID, string[128],string2[128];//2 strings die brauchen wir für den format
format(string,sizeof(string),"Sie wurden erfolgreich von %s geheilt",SpielerName(pID));//hier wird string1 formatiert
SendClientMessage(playerid,Türkis,string);//dort string 1 abgestendet
format(string2,sizeof(string2),"Du hast erfolgreich %s für 150$ geheilt",SpielerName(playerid));//hier string2 formatiert
SendClientMessage(playerid,Türkis,string2);//und hier string2 abgesendet
GivePlayerMoney(pID,150);//Der was den befehl /heal ausgeführt hat bekommt dieses geht 150$
GivePlayerMoney(playerid,-150);//Der was geheilt wird bekommt 150$ abgezogen
heal[pID] = 0;//Und hier wird die variabele wieder auf 0 gesetzt das sie benutzt wurde
}
else
{
SendClientMessage(playerid,Grau,"Du hast keine Healanfrage bekommen!");//dashier wird angezeigt wenn keiner zuvor den /heal befehl ausgeführt hat
}
}so möglichts weit unten im script kommt nun der /heal befehl als ocmd wir beginnen mit dem grundgerüst
ocmd:heal(playerid,params[])
{
return 1;
}
das sieht dan so ausnun wollen wir das es nur Medics oder admins können ich benutze hierzu enums... ihr müsstest also nur die fraktions abfrage ändern.
ocmd:medheal(playerid,params[])
{
if(PlayerInfo[playerid][pMember] == 3||PlayerInfo[playerid][pLeader] == 3)//Dashier ist die Fraktions abfrage ändert sie in eure
{
new pID;//dashier ist die partner id also der was geheilt werden soll
if(sscanf(params,"u",pID))return SendClientMessage(playerid,Grau,"Benutzung: /medheal [ID]");//dashier ist der sscanf code der bewirk das er eine ID auswählt..
{
new string[128];hier ein string dazu gleich mehr
format(string,sizeof(string),"%s:Ich will dich %s für 150$ heilen, nehme die Anfrage mit /accept heal an.",SpielerName(playerid),SpielerName(pID));bei diesem string wird angezeit wer wen heilt
SendClientMessage(pID,Weiss,string);hier wird unser string abgeschickt
SendClientMessage(playerid,Grau,"Healanfrage verschickt");und da wird bestätigt das es abgeschikt wurde
heal[pID] = 1;//Dashier ist unsere goldene Variabale :)
}
}
return 1;
}jetzt noch auch ganz unten einen stock SpielerName(playerid) damit wir unseren Spielernamen herrausfinden das ist ganz einfach
//SpielerName-Stock
stock SpielerName(playerid)
{
new GetName[MAX_PLAYER_NAME];
GetPlayerName(playerid,GetName,sizeof(GetName));//hier wird der name herrausgefunden und dan in SpielerName gepackt
return GetName;
}und das wars ich hoffe ich konnte euch hilfreich sein! :)</a_samp>
Also wenn du schon was hier postest dann doch bitte was produktivesDer unnötigstes Fehler welchen man machen kann
stock SpielerName(playerid)
{
new GetName[MAX_PLAYER_NAME];
GetPlayerName(playerid,GetName,sizeof(GetName));//hier wird der name herrausgefunden und dan in SpielerName gepackt
return GetName;
}warum jedes mal den namen auslesen , wenn man das ganze auch als array speichern kann die meisten gf haben sogar dafür eine
accountvariabeldazu kann man auch noch ein Makro benutzen. sollte dies nicht der Fall sein macht auch nix dann erstellt man ein
3DArray und ließt für den Spieler den Namen aus#define PlayerName(%0) pName[%0]
new pName[MAX_PLAYERS][MAX_PLAYER_NAME];
strdel(pName[playerid],0,MAX_PLAYER_NAME);
GetPlayerName(playerid,pName[playerid],MAX_PLAYER_NAME);und das nächste wäre dies
new heal[MAX_PLAYERS];
warum benutzt du nicht einfach ein boolean dies spart memory oder ein char arrayNächster Punkt
new pID, string[128],string2[128];//2 strings die brauchen wir für den format
format(string,sizeof(string),"Sie wurden erfolgreich von %s geheilt",SpielerName(pID));//hier wird string1 formatiert
SendClientMessage(playerid,Türkis,string);//dort string 1 abgestendet
format(string2,sizeof(string2),"Du hast erfolgreich %s für 150$ geheilt",SpielerName(playerid));//hier string2 formatiertzwei unnötige große strings 64 reichen da völlig aus und einer allein auch.
und noch was bei if-statements wo was returnt wird lässt man die Klammern weg
-
Sorry ich bin noch nicht der profi scripter und benutze auch kein GF !! ich mache selfmade aber trotzdem danke ich werde es fürs nechste mal verbessern
-
Sorry ich bin noch nicht der profi scripter und benutze auch kein GF !! ich mache selfmade aber trotzdem danke ich werde es fürs nechste mal verbessern
Dan brauchst du das doch nicht extra hier rein posten, wenn du schon ein Tutorial dort geschrieben hast
[ SCRIPTING ] /Heal und /accept befehl -
ocmd:biz(playerid,params[])
{
new path[128], preis, art,setx[128],sety[128],setz[128],setp[128], seta[128], sstring[128];
new string[128] = "binfo";
format(path, sizeof(path), "/biz/%s.ini", string);
if(sscanf(params, "ii", preis, art))
{
SendClientMessage(playerid, -1, "/biz [Preis] [Art: 1-5]");
SendClientMessage(playerid, -1, "biz-Arten: 1: Klein, 2:Mittel, 3:Groß, 4:Restaurante, 5:Sonstige");
}
else
{
if(!dini_Exists(path))
{
dini_Create(path);
SendClientMessage(playerid, -1, "Biz Datei erstellt!");
dini_IntSet(path, "bMAX", 0);
return 0;
}
else
{
new Float:x1, Float:y1, Float:z1;
GetPlayerPos(playerid, x1,y1,z1);
new math = dini_Int(path, "bMAX") + 1;
dini_IntSet(path, "bMAX", math);
format(setx, sizeof(setx), "x%i", dini_Int(path, "bMAX"));
format(sety, sizeof(sety), "y%i", dini_Int(path, "bMAX"));
format(setz, sizeof(setz), "z%i", dini_Int(path, "bMAX"));
format(setp, sizeof(setp), "preis%i", dini_Int(path, "bMAX"));
format(seta, sizeof(seta), "art%i", dini_Int(path, "bMAX"));
dini_FloatSet(path, setx, x1);
dini_FloatSet(path, sety, y1);
dini_FloatSet(path, setz, z1);
dini_IntSet(path, setp, preis);
dini_IntSet(path, seta, art);
format(sstring,sizeof(sstring), "Biz %i erfolgreich erstellt. p: %i a: %i", dini_Int(path, "bMAX"), dini_Int(path, setp),dini_Int(path,seta));
SendClientMessage(playerid, -1, sstring);
}
}
return 1;
}So sieht das ganze dann in etwa in Aktion aus:
Code
Alles anzeigenbMAX=7 x1=1957.136108 y1=1342.702758 z1=15.374607 preis1=1 art1=5 x2=1969.774047 y2=1343.649902 z2=15.438861 preis2=10 art2=5 x3=1996.973999 y3=1343.749877 z3=10.960080 preis3=20001 art3=2 x4=2023.935791 y4=1344.213256 z4=10.820312 preis4=154421 art4=4 x5=2031.644409 y5=1344.098266 z5=10.820312 preis5=154421 art5=4 x6=2032.511840 y6=1354.733764 z6=10.820312 preis6=154421 art6=4 x7=2032.678588 y7=1365.942504 z7=10.820312 preis7=154421 art7=4
Vielleicht ist das ja für jemandem hilfreich.
Mir hat's auf jedenfall sehr geholfen. -
-
Er hat auf schlechte Art und Weise gezeigt, wie man nutzlose/sinnlose Variablen mit Dini abspeichert
-
Manche sehen vielleicht nicht das vor "Codeschnipsel" noch das Wort "Nützliche" steht.
-
Vor einigen Tagen habe ich gelesen, dass so eine Funktion gebraucht wird, nun hier mal eine simple verdrehens Funktion:
stock verdrehen(txt[]) {
new len=strlen(txt),s,tmp[128];
for(; s<len; s++) {
new x = random(strlen(txt));
tmp[s] = txt[x];
strdel(txt,x,x+1);
}
strins(tmp,txt,strlen(txt),128);
return tmp;
}//Verwendung:
printf("Wort: %s",verdrehen("Reallife"));
//-> Output: eeillafR //ändert sich natürlich immerHoffe ich konnte einigen Helfen...
mfg.
-
Für die die es satt haben für Kick ein Timer zu erstellen seit 0.3x hab ich was kleines gemacht das auch ganz gut Funktioniert
Der Code
Spoiler anzeigen #include <a_samp>Spoiler anzeigen native B_Kick(playerid) = Kick;Spoiler anzeigen forward kickplayer(playerid);Spoiler anzeigen stock _Kick(playerid)
{
SetTimerEx("kickplayer",100,0,"d",playerid);
return 1;
}Spoiler anzeigen public kickplayer(playerid)
{
return B_Kick(playerid);
}Spoiler anzeigen #if defined _ALS_Kick
#undef Kick
#else
#define _ALS_Kick
#endif
#define Kick _KickAls Include datei hab ich es noch angehangen
Die einrichtung ist ganz easy
einfach nur im Script das einfügen (sofern ihr die include nutzt^^)
#include <b_kick>
Compilen und schon funktioniert alles -
und noch was bei if-statements wo was returnt wird lässt man die Klammern weg
Nen größeren Schwachsinn hab ich hier in diesem Forum glaube ich noch nicht lesen dürfen. Mach dir mal bitte Gedanken darüber, wofür die Klammern eigentlich da sind und welchen Zweck sie erfüllen, bevor du andere belehren möchtest. Danke.
-
Für die die es satt haben für Kick ein Timer zu erstellen seit 0.3x hab ich was kleines gemacht das auch ganz gut Funktioniert
Der Code
Spoiler anzeigen #include <a_samp>Spoiler anzeigen native B_Kick(playerid) = Kick;Spoiler anzeigen forward kickplayer(playerid);Spoiler anzeigen stock _Kick(playerid)
{
SetTimerEx("kickplayer",100,0,"d",playerid);
return 1;
}Spoiler anzeigen public kickplayer(playerid)
{
return B_Kick(playerid);
}Spoiler anzeigen #if defined _ALS_Kick
#undef Kick
#else
#define _ALS_Kick
#endif
#define Kick _KickAls Include datei hab ich es noch angehangen
Die einrichtung ist ganz easy
einfach nur im Script das einfügen (sofern ihr die include nutzt^^)
#include <b_kick>
Compilen und schon funktioniert alles
Zwar nichts großes dennoch Dynamisch -
Naja Dynamisch nenn ich das eher nicht
Es ist hilfreich bei Scripts die ne menge an Zeilen haben, da man damit ordentlich Zeit sparen kann^^