Hast du es mal mit GivePlayerWeapon anstatt SetPlayerAmmo versucht? Ich habe eigentlich immer GivePlayerWeapon für solche Dinge genutzt.
new weap, ammo;
GetPlayerWeaponData(playerid, 5, weap, ammo);
GivePlayerWeapon(playerid, weap, 150);
Hast du es mal mit GivePlayerWeapon anstatt SetPlayerAmmo versucht? Ich habe eigentlich immer GivePlayerWeapon für solche Dinge genutzt.
new weap, ammo;
GetPlayerWeaponData(playerid, 5, weap, ammo);
GivePlayerWeapon(playerid, weap, 150);
Hast du es mal mit GivePlayerWeapon anstatt SetPlayerAmmo versucht? Ich habe eigentlich immer GivePlayerWeapon für solche Dinge genutzt.
new weap, ammo;GetPlayerWeaponData(playerid, 5, weap, ammo);GivePlayerWeapon(playerid, weap, 150);
Passiert auch nichts
//EDIT
, problem gefunden , danke
Es muss doch irgendwie möglich sein, dass man bei einer Animation laufen kann. Es geht auf anderen Servern ja auch. Ich hatte es auch mal, weiß aber nicht mehr Wie..
Weiß zufällig jemand woran es liegen könnte, dass mein Compiler beim Versuch zu compilen (F5) beim ersten Mal abschmiert und direkt ohne Änderung bei dem nächsten Versuch nur bspw. einen Error findet?
Es kommt bei mir immer öfter vor und es stört halt schon immer mehrmals zu compilen.
Es kommt bei mir immer öfter vor und es stört halt schon immer mehrmals zu compilen.
Hast wohl neulich dein Betriebssystem geupdatet
Setze die pawno.exe einfach in einen anderen Kompatibilitätsmodus z.B. Windows 7 oder so
Hast wohl neulich dein Betriebssystem geupdatet
Setze die pawno.exe einfach in einen anderen Kompatibilitätsmodus z.B. Windows 7 oder so
Joa, kann sein Ich versuch es mal, danke dir!
Hi, ist das ein eventuell bekannter Fehler, falls ja wie kann ich ihn beheben?
Ich zeige per Befehl zwei verschiedene Textdraws. Ich zeige Textdraw A als erstes (Hintergrund) und zeige danach dem Spieler Textdraw B, trotzdem befindet sich TextDraw B hinter TextDraw A.
Hi, ist das ein eventuell bekannter Fehler, falls ja wie kann ich ihn beheben?
Ich zeige per Befehl zwei verschiedene Textdraws. Ich zeige Textdraw A als erstes (Hintergrund) und zeige danach dem Spieler Textdraw B, trotzdem befindet sich TextDraw B hinter TextDraw A.
Ich habe keine Ahnung und falls es sich dumm anhört löscht es.
Wenn sich Textdraw B hinter Textdraw A befindet und du es genau andersherum möchtest, dann schreib doch das was in A kommt in B und das was in B kommt in A
Ne, das würde nicht helfen, da ich soeben bemerkt habe das es auf die Reihenfolge ankommt wann man die Textdraws erstellt.
Sprich Lösung: Reihenfolge ändern wann die Textdraws erstellt werden.
Jetzt habe ich noch eine andere Frage:
Ich habe kürzlich mit Hilfe von @Jeffry ein "Skill System erstellt, womit es 6 verschiedene Level gibt (0 dazugezählt). Jetzt würde ich die gerne alle in einem Textdraw anzeigen lassen, aber ich habe das viel zu umständlich gemacht (es funktioniert, aber es geht definitiv einfacher), nur die Frage ist wie
So schaut der Befehl aus:
CMD:skills(playerid,params[])
{
if(SkillShowing[playerid] == 1)
{
SkillShowing[playerid] = 0;
HideSkillTextDraw(playerid);
HideSkillBar(playerid);
}
else
{
SkillShowing[playerid] = 1;
ShowSkillBar(playerid);
ShowSkillTextDraw(playerid);
if(pData[playerid][P_DoubleEXP] == 5)
{
SetPlayerProgressBarValue(playerid, Bar0[playerid], 100);
SetPlayerProgressBarColour(playerid, Bar0[playerid], 0x008000FF);
ShowSkillBar(playerid);
}
if(pData[playerid][P_DoubleEXP] == 4)
{
SetPlayerProgressBarValue(playerid, Bar0[playerid], 80);
SetPlayerProgressBarColour(playerid, Bar0[playerid], 0x80FF00FF);
ShowSkillBar(playerid);
}
if(pData[playerid][P_DoubleEXP] == 3)
{
SetPlayerProgressBarValue(playerid, Bar0[playerid], 60);
SetPlayerProgressBarColour(playerid, Bar0[playerid], 0xFFFF00FF);
ShowSkillBar(playerid);
}
if(pData[playerid][P_DoubleEXP] == 2)
{
SetPlayerProgressBarValue(playerid, Bar0[playerid], 40);
SetPlayerProgressBarColour(playerid, Bar0[playerid], 0xFF8000FF);
ShowSkillBar(playerid);
}
if(pData[playerid][P_DoubleEXP] == 1)
{
SetPlayerProgressBarValue(playerid, Bar0[playerid], 20);
SetPlayerProgressBarColour(playerid, Bar0[playerid], 0xFF0000FF);
ShowSkillBar(playerid);
}
if(pData[playerid][P_DoubleEXP] == 0)
{
SetPlayerProgressBarValue(playerid, Bar0[playerid], 0);
SetPlayerProgressBarColour(playerid, Bar0[playerid], 0xC0C0C0FF);
ShowSkillBar(playerid);
}
}
return 1;
}
Für jedes Level wird eine andere Farbe & eine andere Größe verwendet, wie könnte ich das einfacher, zeilensparender schreiben?
Info:
Beispiel Skill Code:
if(pData[playerid][P_DeathExplosion] >= 1 && random(10) < pData[playerid][P_DeathExplosion])
{
//Player is Skill Level 1+ and Deathexplosion appeared
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
CreateExplosion(x, y, z, 10, 2.5);
}
if(pData[playerid][P_ArmourSpawn] >= 1 && random(10) < pData[playerid][P_ArmourSpawn])
{
//Player is Skill Level 1+ and Deathexplosion appeared
SetPlayerArmour(playerid, 30);
}
CMD:skills(playerid,params[])
{
if(SkillShowing[playerid] == 1)
{
SkillShowing[playerid] = 0;
HideSkillTextDraw(playerid);
HideSkillBar(playerid);
return 1;
}
else
{
SkillShowing[playerid] = 1;
ShowSkillBar(playerid);
ShowSkillTextDraw(playerid);
SetPlayerProgressBarValue(playerid,Bar0[playerid],pData[playerid][P_DoubleEXP]*20);
switch(pData[playerid][P_DoubleEXP])
{
case 5:SetPlayerProgressBarColour(playerid, Bar0[playerid], 0x008000FF);
case 4:SetPlayerProgressBarColour(playerid, Bar0[playerid], 0x80FF00FF);
case 3:SetPlayerProgressBarColour(playerid, Bar0[playerid], 0xFFFF00FF);
case 2:SetPlayerProgressBarColour(playerid, Bar0[playerid], 0xFF8000FF);
case 1:SetPlayerProgressBarColour(playerid, Bar0[playerid], 0xFF0000FF);
case 0:SetPlayerProgressBarColour(playerid, Bar0[playerid], 0xC0C0C0FF);
}
ShowSkillBar(playerid);
}
return 1;
}
Alles anzeigen
Mit einer kleinen Formel kann man schon so viele Zeilen sparen und einfacher realisieren.
Danke schonmal, das ist natürlich schon um Welten besser !
Nur, ich besitze ja auch 6 verschiedene Skills, müsste ich dazu für jeden Skill den ganzen Case kopieren oder könnte man da auch zaubern?
(Die Farben bleiben ja gleich, auch wenn die Skills verschieden sind. Beispiel: DoppelGeld & Doppel EXP Skill Level 1 bleibt rot.)
(Oben sind ja zwei verschiedene Skills aufgelistet (P_Deatghexplosion & P_Armourspawn) )
Genauer gesagt, muss ich das so machen oder geht's nochmal besser?:
CMD:skills2(playerid,params[])
{
if(SkillShowing[playerid] == 1)
{
SkillShowing[playerid] = 0;
HideSkillTextDraw(playerid);
HideSkillBar(playerid);
return 1;
}
else
{
SkillShowing[playerid] = 1;
ShowSkillBar(playerid);
ShowSkillTextDraw(playerid);
SetPlayerProgressBarValue(playerid,Bar0[playerid],pData[playerid][P_DoubleEXP]*20);
switch(pData[playerid][P_DoubleEXP])
{
case 5:SetPlayerProgressBarColour(playerid, Bar0[playerid], 0x008000FF);
case 4:SetPlayerProgressBarColour(playerid, Bar0[playerid], 0x80FF00FF);
case 3:SetPlayerProgressBarColour(playerid, Bar0[playerid], 0xFFFF00FF);
case 2:SetPlayerProgressBarColour(playerid, Bar0[playerid], 0xFF8000FF);
case 1:SetPlayerProgressBarColour(playerid, Bar0[playerid], 0xFF0000FF);
case 0:SetPlayerProgressBarColour(playerid, Bar0[playerid], 0xC0C0C0FF);
}
SetPlayerProgressBarValue(playerid,Bar1[playerid],pData[playerid][P_DoubleWeed]*20);
switch(pData[playerid][P_DoubleWeed])
{
case 5:SetPlayerProgressBarColour(playerid, Bar1[playerid], 0x008000FF);
case 4:SetPlayerProgressBarColour(playerid, Bar1[playerid], 0x80FF00FF);
case 3:SetPlayerProgressBarColour(playerid, Bar1[playerid], 0xFFFF00FF);
case 2:SetPlayerProgressBarColour(playerid, Bar1[playerid], 0xFF8000FF);
case 1:SetPlayerProgressBarColour(playerid, Bar1[playerid], 0xFF0000FF);
case 0:SetPlayerProgressBarColour(playerid, Bar1[playerid], 0xC0C0C0FF);
}
ShowSkillBar(playerid);
}
return 1;
}
Ja, der Code ist so richtig. Den kann man bestimmt noch einmal aufpeppen (bzw. kürzer schreiben), aber ich glaube dann verliert man so langsam die Übersicht.
Nur, ich besitze ja auch 6 verschiedene Skills, müsste ich dazu für jeden Skill den ganzen Case kopieren oder könnte man da auch zaubern?
(Die Farben bleiben ja gleich, auch wenn die Skills verschieden sind. Beispiel: DoppelGeld & Doppel EXP Skill Level 1 bleibt rot.)
Da musst du den switch-Teil immer wieder einfügen, weil es ja immer verschiedene Variablen-Namen sind und auch immer andere ProgressBar-Namen (Bar0, Bar1, etc.).
Ok, ist ja in Ordnung, dachte nur man hätte das noch einfacher schreiben können. Meine letzte Frage:
Ich habe Textdraws eingefügt die anzeigen wie viel Prozent man zurzeit hat (0, 20, 40, 60, 80 & 100)
Wie kann ich die Zahl dem passenden Level anpassen ohne gleich den Code um die ~25 mal zu kopieren?
Also, so setze ich den beispielsweise auf 100 %
PlayerTextDrawSetString(playerid, EXPSkillCount[playerid][0], "100%");
Könnte ich nicht eine ähnliche Variante wie SetPlayerProgressBarValue(playerid,Bar0[playerid],pData[playerid][P_DoubleEXP]*20); verwenden damit ich das nicht oftmals kopieren muss?
Hmm als ich das nur für ein Skill hinzugefügt habe, hat es funktioniert, jetzt habe ich es für alle gemacht und es kommt überall eine andere Prozentzahl raus O.o
Außerdem fehlt das Prozentzeichen, obwohl ich es auch dahinter eingefügt habe
new string[5];
format(string,sizeof(string),"%d",100/pData[playerid][P_DoubleEXP]);
PlayerTextDrawSetString(playerid, EXPSkillCount[playerid][0], string);
switch(pData[playerid][P_DoubleEXP])
{
case 5:SetPlayerProgressBarColour(playerid, Bar0[playerid], 0x008000FF);
case 4:SetPlayerProgressBarColour(playerid, Bar0[playerid], 0x80FF00FF);
case 3:SetPlayerProgressBarColour(playerid, Bar0[playerid], 0xFFFF00FF);
case 2:SetPlayerProgressBarColour(playerid, Bar0[playerid], 0xFF8000FF);
case 1:SetPlayerProgressBarColour(playerid, Bar0[playerid], 0xFF0000FF);
case 0:SetPlayerProgressBarColour(playerid, Bar0[playerid], 0xC0C0C0FF);
}
SetPlayerProgressBarValue(playerid,Bar1[playerid],pData[playerid][P_DoubleWeed]*20);
new string2[5];
format(string2,sizeof(string2),"%d",100/pData[playerid][P_DoubleWeed]);
PlayerTextDrawSetString(playerid, EXPSkillCount[playerid][1], string2);
switch(pData[playerid][P_DoubleWeed])
Ich hatte mich vorhin, in meinen Post davor, verschrieben. Du musst nicht 100/P_DoubleEXP nehmen, sondern einfach, wie gewohnt, 20*P_DoubleEXP. Sorry.
new string[5];
format(string,sizeof(string),"%d%",20*pData[playerid][P_DoubleEXP]);
PlayerTextDrawSetString(playerid, EXPSkillCount[playerid][0], string);
switch(pData[playerid][P_DoubleEXP])
{
case 5:SetPlayerProgressBarColour(playerid, Bar0[playerid], 0x008000FF);
case 4:SetPlayerProgressBarColour(playerid, Bar0[playerid], 0x80FF00FF);
case 3:SetPlayerProgressBarColour(playerid, Bar0[playerid], 0xFFFF00FF);
case 2:SetPlayerProgressBarColour(playerid, Bar0[playerid], 0xFF8000FF);
case 1:SetPlayerProgressBarColour(playerid, Bar0[playerid], 0xFF0000FF);
case 0:SetPlayerProgressBarColour(playerid, Bar0[playerid], 0xC0C0C0FF);
}
SetPlayerProgressBarValue(playerid,Bar1[playerid],pData[playerid][P_DoubleWeed]*20);
format(string,sizeof(string),"%d%",20*pData[playerid][P_DoubleWeed]);
PlayerTextDrawSetString(playerid, EXPSkillCount[playerid][1], string);
switch(pData[playerid][P_DoubleWeed])
Alles anzeigen
- EDIT: Das reicht auch, wenn du nur einmal den string formatierst, sodass du dann nicht 6 brauchst.
Jemand eine Idee warum sich mein Textdraw nicht anklicken lässt?
SkillTD[playerid][1] = CreatePlayerTextDraw(playerid,244.000000, 100.000000, "Double - EXP");
PlayerTextDrawBackgroundColor(playerid,SkillTD[playerid][1], 255);
PlayerTextDrawFont(playerid,SkillTD[playerid][1], 2);
PlayerTextDrawLetterSize(playerid,SkillTD[playerid][1], 0.280000, 1.200000);
PlayerTextDrawTextSize(playerid, SkillTD[playerid][1], 340.0, 8.0);
PlayerTextDrawColor(playerid,SkillTD[playerid][1], -1);
PlayerTextDrawSetOutline(playerid,SkillTD[playerid][1], 0);
PlayerTextDrawSetProportional(playerid,SkillTD[playerid][1], 1);
PlayerTextDrawSetShadow(playerid,SkillTD[playerid][1], 1);
PlayerTextDrawSetSelectable(playerid,SkillTD[playerid][1], 1);
public OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid)
{
if(playertextid == SkillTD[playerid][1])
{
new expstring[512];
strcat(expstring,"{FFFFFF}Skill Name:\n{FF0000}Double EXP Chance\n");
strcat(expstring,"{FFFFFF}Description:\n");
strcat(expstring,"{FFFFFF}You have a {FF0000}chance{FFFFFF} to get {FF0000}double EXP {FFFFFF}if you kill someone.\n");
strcat(expstring,"{FFFFFF}The chance depends on your {FF0000}skill level.\n\n\n");
strcat(expstring,"{FFFFFF}Skill 1 = {FF0000}10 % Chance.\n");
strcat(expstring,"{FFFFFF}Skill 2 = {FF0000}20 % Chance.\n");
strcat(expstring,"{FFFFFF}Skill 3 = {FF0000}30 % Chance.\n");
strcat(expstring,"{FFFFFF}Skill 4 = {FF0000}40 % Chance.\n");
strcat(expstring,"{FFFFFF}Skill 5 = {FF0000}50 % Chance.\n");
ShowPlayerDialog(playerid, D_DoubleEXP, DIALOG_STYLE_MSGBOX, "Description", expstring, "Ok", "");
}
}
return 1;
}
Bei mir funktioniert alles. Versuch mal so:
SkillTD[playerid][1] = CreatePlayerTextDraw(playerid,244.000000, 100.000000, "Double - EXP");
PlayerTextDrawBackgroundColor(playerid,SkillTD[playerid][1], 255);
PlayerTextDrawFont(playerid,SkillTD[playerid][1], 2);
PlayerTextDrawLetterSize(playerid,SkillTD[playerid][10], 0.280000, 1.200000);
PlayerTextDrawTextSize(playerid, SkillTD[playerid][1], 340.0, 10.0);
PlayerTextDrawUseBox(playerid,SkillTD[playerid][1],1);
PlayerTextDrawColor(playerid,SkillTD[playerid][1], -1);
PlayerTextDrawSetOutline(playerid,SkillTD[playerid][1], 0);
PlayerTextDrawSetProportional(playerid,SkillTD[playerid][1], 1);
PlayerTextDrawSetShadow(playerid,SkillTD[playerid][1], 1);
PlayerTextDrawSetSelectable(playerid,SkillTD[playerid][1], 1);
public OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid)
{
if(playertextid == SkillTD[playerid][1])
{
new expstring[512];
strcat(expstring,"{FFFFFF}Skill Name:\n{FF0000}Double EXP Chance\n");
strcat(expstring,"{FFFFFF}Description:\n");
strcat(expstring,"{FFFFFF}You have a {FF0000}chance{FFFFFF} to get {FF0000}double EXP {FFFFFF}if you kill someone.\n");
strcat(expstring,"{FFFFFF}The chance depends on your {FF0000}skill level.\n\n\n");
strcat(expstring,"{FFFFFF}Skill 1 = {FF0000}10 % Chance.\n");
strcat(expstring,"{FFFFFF}Skill 2 = {FF0000}20 % Chance.\n");
strcat(expstring,"{FFFFFF}Skill 3 = {FF0000}30 % Chance.\n");
strcat(expstring,"{FFFFFF}Skill 4 = {FF0000}40 % Chance.\n");
strcat(expstring,"{FFFFFF}Skill 5 = {FF0000}50 % Chance.\n");
ShowPlayerDialog(playerid, D_DoubleEXP, DIALOG_STYLE_MSGBOX, "Description", expstring, "Ok", "");
}
return 1;
}
Alles anzeigen
Ja, so geht's aber man sieht eine Box dahinter, wie kann ich die entfernen?