@[BFX]Explosion Man könnte die Namen auf Deutsch machen, wie ich in meinem Fall. Wäre ein kleiner Vorteil bzw sieht besser aus.
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
-
-
@[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 -
Habe ich im russischen Forum gefunden, ist zwar nicht wirklich nützlich aber witzig ist es alle male, vorallem mit dem russischen Akzent
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 obenGruss
-
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
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))); -
Kann es sein das bei deinem Code Doppeltab ist?
-
Kann es sein das bei deinem Code Doppeltab ist?
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. -
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 -
stock GetWeaponIDFromName(WeaponName[])
{
for(new i = 0; i <= 46; i++)
{
switch(i)
{
case 0,19,20,21: continue;
default:
{
if(strfind(GetWeaponNameById(i),WeaponName,true) != -1) return i;
}
}
}
return -1;
}
GetWeaponNameByIdDas würde das Ganze vervollständigen, somit haben wir einen Zwei-Wege-Abfragemöglichkeit.
-
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.comInhalte 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.comInhalte 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. -
-
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;
} -
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;
}
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
-
Dazu ist ''GRAU" nichtmal definiert
-
//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.
-
Naja aber dann würde es doch reichen wenn man nur bei den 3 den Namen manuell ausgibt. Also iwie so
stock GetWeaponNameByID(wID) {
new wName[32];
switch (wID) {
case 1 .. 17, 22 .. 43, 46: GetWeaponName(wID,wName,32);
case 0: format(wName,32,"Fist");
case 18: format(wName,32,"Molotov Cocktail");
case 44: format(wName,32,"Night Vis Goggles");
case 45: format(wName,32,"Thermal Goggles");
default: format(wName,32,"Invalid Weapon Id");
}
return wName;
}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";Wäre es so nicht viel einfacher?
new WaffenName[][] =
{
"Faust","Schlagring","Golfschläger","Schlagstock","Messer","Baseballschläger","Schaufel","Billiard Schläger","Katana","Kettensäge",
"Dildo","Vibrator","Vibrator","Dildo","Blumen","Stock","Granate","Tränengas","Molotow Coctail","-","-","-",
"9mm Pistole","SDPistole","Deagle","Shotgun","Sawn-Off Shotgun","Combat Shotgun","Micro Uzi","MP5","AK47","M4","Tec9",
"Rifle","Sniper","RPG","Raketenwerfer","Flammenwerfer","Minigun","Rucksackbomben","Detonator","Sprühdose","Feuerlöscher",
"Kamera","Nachtsichtgerät","Infrarotsichtgerät","Fallschirm"
};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"
}; -
Ich weiß nicht,ob es schon gepostet wurde,aber egal..
#define SCM SendClientMessage
damit kann man sich ein bisschen das Tippen sparen..geht natürlich mit anderen -
#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"..]