Dein Portfolio sieht wirklich sehr gut aus, nur hast du ein Schreibfehler. Banner schreibt man meines erachtens mit zwei n.
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
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;
} -
//push
//edit
Neue Werke:und das logo
-
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!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ückzugeifenBeispiel:
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
-
wo ist davon in den .rar ordner den die .exe datei ?
Sry das dort Source dran stand habe ich verpeilt du könntest das ganze auch selbst kompielen und ausführen via microsoft studio
aber hier ist auch die .exe enthalten und die source
http://www.mediafire.com/downl…nlss/SpriteBrowser2.0.zip
//edit gesuchte sprites wären einmal
ld_chat:thumbup
und
ld_chat:thumbdn
-
Das sind sprites es gibt extra ein tool wo alles aufgelistet sind siehe hier:
http://forum.sa-mp.com/showthread.php?t=291722
Download:
-
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
-
Mach das mal so
stock FreeFrakCheck()
{
new query[128];
for(new i;i<MAX_FRACTION_CARS;i++)
{
format(query,128,"SELECT * FROM `frakcars` WHERE `id`='%i' LIMIT 1;",i);
mysql_query(query);
mysql_store_result();
if(mysql_num_rows())continue;//falls eintrag gefunden überspringt er es
return i;//gibt den wert wieder der frei ist
}
return -1;//wenn nix gefunden wird gibt er -1 wieder
}
Bedenke die Abfrage
new id = FreeFrakCheck();
if(id == -1)return error kein slot frei
code hierWieso 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.
-
Gefällt mir sehr 10/10..
Was ich mich frage, ist diese Funktion mit dem streamer von Incocnito möglich ?
Natürlich das eine Funktion des streamer-plugins nur fordert das dein Server ein bissle zusätzlich.