Hast du dir die Werte der Variablen und von GetName mal per Print ausgeben lassen?
Dem Code nach sollte das nämlich so passen. Vielleicht stehst du ja doch irgendwo als Besitzer oder Inhaber drin.
[SAMMELTHREAD] Kleine Scripting Fragen
- Rafelder
- Unerledigt
Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
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
-
-
Der Meinung bin ich auch.
In jeglicher Variable, steht nirgendswo mein Name als Inteilhaber / Besitzer.
GetName zeigt nur meinem Namen an.
#define GetName(%0) PlayerInfo[%0][p_Name]
Bild meiner aktuellen Tabelle
Bild der Business InformationenEdit:
Komischer Weise, als ich die GetName() Funktion durch PlayerInfo[playerid][p_Name] ersetzt habe, wird mir der Dialog nicht mehr angezeigt, also es scheint nun zu funktionieren.
Vielen Dank Jeffry, dass du mich indirekt auf die Idee gebracht hast. -
Tag liebe leuts,
ich habe mal wieder bzw. immer noch ein Problem mit meinem Death-System. Diesmal liegt es nicht am Timer sondern an dem TextLabel und dem Pickup.
Das Problem hierbei ist: Dass wenn ich sterbe, soll ein Pickup sowie TextLabel erstellt werden, dies erfolgt auch nur leider werden diese beiden Sachen an der Position vom Krankenhaus gespawnt hier der code:
Wird übrigens unter OnPlayerDeath aufgerufen.Code
Alles anzeigenstock MedicalSpawn(playerid) { new h,m,s,str[168]; new Float:x,Float:y,Float:z; SetSpawnInfo(playerid,0,SpielerInfo[playerid][pSkin],1171.4297, -1323.3737, 15.5000,90.000,0,0,0,0,0,0); SetPlayerVirtualWorld(playerid,0); SetPlayerInterior(playerid,0); SpawnPlayer(playerid); TogglePlayerControllable(playerid,0); SetPlayerCameraPos(playerid, 1233.3835, -1325.5378, 28.5698); SetPlayerCameraLookAt(playerid, 1232.3846, -1325.5327, 28.4548); if(MedicalTimerID[playerid] != -1) KillTimer(MedicalTimerID[playerid]); MedicalTimerID[playerid] = SetTimerEx("MedicalTimer",1000,true,"i",playerid); GetPlayerPos(playerid,x,y,z); gettime(h,m,s); PickupInfo[playerid][pu_x] = x; PickupInfo[playerid][pu_y] = y; PickupInfo[playerid][pu_z] = z; PickupInfo[playerid][pu_hour] = h; PickupInfo[playerid][pu_minute] = m; PickupInfo[playerid][pu_seconds] = s; PickupInfo[playerid][pu_pickup] = CreatePickup(1313,0,PickupInfo[playerid][pu_x],PickupInfo[playerid][pu_y],PickupInfo[playerid][pu_z]); gettime(h,m,s); format(str,sizeof(str),"Deathpoint of %s\nTime of Death: %02d:%02d:%02d\n%i Seconds left until respawn.",getPlayerName(playerid),h,m,s,SpielerInfo[playerid][pDeathtime]); PickupInfo[playerid][pu_label] = Create3DTextLabel(str,Weiß,PickupInfo[playerid][pu_x],PickupInfo[playerid][pu_y],PickupInfo[playerid][pu_z],15.00,0,0); return 1; }
-
Du musst es vor dem SpawnPlayer erstellen und die Position auslesen, sonst ist er ja schon bei der neuen Position.
-
Problem besteht wie folgt:
Ich sterbe und das Pickup sowie der Text wird an der Todestelle als auch beim Krankenhaus erstellt, aber auch nur der Text beim Krankenhaus wird aktualisiert. -
Ah, bei dir war das, dass es doppelt aufgerufen wird.
Dann sollte es so passen:
stock MedicalSpawn(playerid)
{
static lastSpawn[MAX_PLAYERS];
new h,m,s,str[168],t;
new Float:x,Float:y,Float:z;
GetPlayerPos(playerid,x,y,z);
t = gettime(h,m,s);
if(lastSpawn[playerid]+1 < t)
{
lastSpawn[playerid] = t;
PickupInfo[playerid][pu_x] = x;
PickupInfo[playerid][pu_y] = y;
PickupInfo[playerid][pu_z] = z;
PickupInfo[playerid][pu_hour] = h;
PickupInfo[playerid][pu_minute] = m;
PickupInfo[playerid][pu_seconds] = s;
PickupInfo[playerid][pu_pickup] = CreatePickup(1313,0,PickupInfo[playerid][pu_x],PickupInfo[playerid][pu_y],PickupInfo[playerid][pu_z]);
format(str,sizeof(str),"Deathpoint of %s\nTime of Death: %02d:%02d:%02d\n%i Seconds left until respawn.",getPlayerName(playerid),h,m,s,SpielerInfo[playerid][pDeathtime]);
PickupInfo[playerid][pu_label] = Create3DTextLabel(str,Weiß,PickupInfo[playerid][pu_x],PickupInfo[playerid][pu_y],PickupInfo[playerid][pu_z],15.00,0,0);
if(MedicalTimerID[playerid] != -1) KillTimer(MedicalTimerID[playerid]);
MedicalTimerID[playerid] = SetTimerEx("MedicalTimer",1000,true,"i",playerid);
}
SetSpawnInfo(playerid,0,SpielerInfo[playerid][pSkin],1171.4297, -1323.3737, 15.5000,90.000,0,0,0,0,0,0);
SetPlayerVirtualWorld(playerid,0);
SetPlayerInterior(playerid,0);
SpawnPlayer(playerid);
TogglePlayerControllable(playerid,0);
SetPlayerCameraPos(playerid, 1233.3835, -1325.5378, 28.5698);
SetPlayerCameraLookAt(playerid, 1232.3846, -1325.5327, 28.4548);
return 1;
} -
Danke funktioniert
-
Mal ne kleine dump Frage für nebenher, in meinem PAWNO sind meine Parameter Angaben deaktiviert, wie aktiviere ich sie?
-
Options -> Show Function List
-
Options -> Show Function List
Ja, dachte ich mir auch bis ich sah das die Leiste leer ist und somit falsch lag.
Die Leiste ist leer bei mir. -
Dann musst du die pawno.exe als Administrator öffnen.
-
Nun sind se da, besten dank.
-
Heyho,
Ich möchte gerne random einige Güter aus Boxen droppen lassen.
Diese sollen festgelegte Chancen haben, diese aus der Box zu erhalten (bsp. 40%)
Wie kann ich solche Prozentualen Chancen festlegen? -
-
40% kannst du so festlegen:
if(random(100) < 40)
{
//40% Chance hier zu landen
}Du kannst auch 10 und 4 nehmen, ich habe es nur so zur Veranschaulichung gemacht.
EDIT: Ein Switch lohnt sich da meiner Meinung nach nicht, da es nur eine Abfrage ist, die ist in dem Fall performanter.
-
EDIT: Ein Switch lohnt sich da meiner Meinung nach nicht, da es nur eine Abfrage ist, die ist in dem Fall performanter.
Weißte ja nicht...
Vielleicht will er das verschiedene Dinge passieren, zu 10%..20%...30%...
Zudem ist ein switch immer schneller als eine if-Abfrage..da per jumptable direkt an die Stelle gesprungen wird..
-
Seit den neuen Updates spawne ich nur noch unter der Farm.
Wird der Spawn inzwischen durch SetSpawnInfo festgelegt oder woran kann das noch liegen?
Habe nichts verändert. -
Nabend,
Ein Kollege wollte ein Text auf ein Objekt schreiben was so aussehen sollte: http://picture.new-generationdm.de/img/568a8170b2f9c.png
Nun ist das hier drauß geworden: 1. http://i.epvpimg.com/YBeCe.png 2. http://i.epvpimg.com/QepXe.jpgMeine Frage wäre jetzt ob das an den Objekt liegt oder ob da im Script irgendwas falsch ist.
-
Dein Freund sollte den materialindex mal wechseln, also einfach mal so zwischen 0-4 (vielleicht auch mehr) durch gehen, und schauen welcher Index der richtige war, damit das vorne auf das richtige "Brett" steht.
Damit der Text da nur einmal steht, müsst ihr eine größere Schrift wählen. -
Zudem ist ein switch immer schneller als eine if-Abfrage..da per jumptable direkt an die Stelle gesprungen wird..
Nein, nicht immer. Bei einer Abfrage ist die if-Variante - da korrigiere ich mich - zum Teil schneller, auch nicht immer. Es kommt drauf an, wie man die Abfrage macht. Interessanterweise, das ist mir grade aufgefallen, ist eine Abfrage if(x < 10) langsamer als if(x < 1).
Hier aber zum Beispiel ist die if-Abfrage schneller:
new a;
a = 1;
new t = GetTickCount();
for(new i = 0; i < 10000000; i++)
{
if(a == 0) { }
else { }
}
printf("if: %dms", GetTickCount()-t);
t = GetTickCount();
for(new i = 0; i < 10000000; i++)
{
switch(a)
{
case 0: { }
default: { }
}
}
printf("switch: %dms", GetTickCount()-t);Tatsächlich kommt es aber dann darauf an, wie viel Prozent Differenz er nimmt, ob es performanter ist oder nicht, daher würde ich sagen beide Varianten sind in Ordnung, wobei ich trotzdem die if-Variante bevorzuge, da sie schneller zu schreiben ist und der Performanceunterschied irrelevent gering ist.
-