new RandomWeaponsIDs[] = {
5, 6, 7, 8, 9, 10, 12, 13, 14, 15
};
stock DropWeapon()
{
new r = random(sizeof(RandomWeapons));
new w = random(sizeof(RandomWeaponsIDs));
CreateDynamicPickup(RandomWeaponsIDs[w], 19, RandomWeapons[r][0], RandomWeapons[r][1], RandomWeapons[r][2]);
return 1;
}
[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
-
-
Dankesehr Jeffry.
Wie muss ich vorgehen wenn ich z.B. 500 Spawns habe und von den 500 Spawns nur 100 benutzen möchte und das zufällig? Möchte jetzt nicht 100 mal copy & paste machen, das geht doch auch bestimmt anders, oder
? -
Kommt drauf an wie du festlegst, welche 100 der 500 genommen werden sollen. Wie machst du das?
-
Das ist ja die Frage, wie stelle ich das an? Habe aktuell nur Position festgelegt, aber noch keine Funktion erstellt wie viele Waffen davon gespawnt werden.
So habe ich die Positionen festgelegt:
new Float:RandomPos[][3] =
{
// Positions, (X, Y, Z)
{685.6752,-2651.7720,8.0190}, // Item 1
{684.8967,-2645.3086,10.0238}, // Item 2
{694.2231,-2632.8337,6.1310}, // Item 3
{705.6307,-2652.8721,6.1286}, // Item 4
{711.4756,-2675.3149,6.1310}, // Item 5
{718.3091,-2702.7249,6.0270}, // Item 6
{740.3206,-2697.1089,6.0270}, // Item 7
{749.1022,-2716.9546,22.1051}, // Item 8
{770.3851,-2706.6096,24.0732}, // Item 9
{764.4352,-2653.2769,24.0732} // Item 10
}; -
Versuche es so:
stock DropWeapon(amount)
{
//Zwischenspeichern des RandomPos Arrays um darin zu arbeiten
new Float:tmp[sizeof(RandomPos)][3];
tmp = RandomPos;
//Werte deklarieren
new r,w,count = sizeof(RandomPos);
//Schleife für die Anzahl der Waffen die erstellt werden sollen
for(new i = 0; i < amount; i++)
{
//Zufallswerte generieren
r = random(count);
w = random(sizeof(RandomWeaponsIDs));
//Pickup an der gefundenen Position erstellen
CreatePickup(RandomWeaponsIDs[w], 19, tmp[r][0], tmp[r][1], tmp[r][2]);
//Den gefundenen Ort aus dem tmp-Array entfernen, indem
//alle nachfolgenden Orte eins nach vorne gezogen werden (=keine doppelten Orte)
for(new j = r; j < count - 1; j++)
{
tmp[j][0] = tmp[j+1][0];
tmp[j][1] = tmp[j+1][1];
tmp[j][2] = tmp[j+1][2];
}
count--;
}
return 1;
}Der Aufruf:
DropWeapon(5);Das würde dann 5 von den 10 Plätzen mit jeweils einer zufälligen Waffe ausstatten.
-
hallo, habe ne kurze Frage und zwar frag ich mich ob diese Abfrage richtig ist, einen String bzw Integer mit nem Enum zu vergleichen...
Codefor(new i = 0; i < sizeof(AkteInfo); i++) { new gesuchtid = strval(inputtext); new name[MAX_PLAYER_NAME]; GetPlayerName(gesuchtid, name, sizeof(name)); if(AkteInfo[i][akte_name] == name) { /* etc... */ } }
error 033: array must be indexed (variable "name")Habe sogar statt == mit && getauscht, aber warum bekomme ich da einen Fehler:
(in dieser Zeile ) : -
new gesuchtid = strval(inputtext);
new name[MAX_PLAYER_NAME];
GetPlayerName(gesuchtid, name, sizeof(name));
for(new i = 0; i < sizeof(AkteInfo); i++)
{
if(!strcmp(AkteInfo[i][akte_name],name))
{
/* etc... */
}
}Zum Vergleichen von Strings muss man strcmp nutzen (gibt 0 zurück wenn beide gleich sind).
Setze außerdem Werte die immer gleich sind, bei jedem Schleifendurchlauf, außerhalb der Schleife hin. -
Beitrag von German_ScripterHD ()
Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Jeffry war schneller :P (). -
ah okey danke, stimmt

Hatte die Wiki Seiten von strlen & strval offen weil ich mir nicht sicher war ob strcmp benötige.
Wenn es aber um Zahlenvergleichen geht kann ich das so wie oben lassen und mit dem inputtext vergleichen? -
Wenn du eine Zahl, die du eingibst vergleichen willst, dann über strval vom inputtext.
new zahl = strval(inputtext);
//...
if(xyz == zahl)
{
//...
} -
ah okey, dank dir @Jeffry, dann ändere ich mal das sofort um die anderen Funktionen, habe dann irgendwie einen langen umweg gemacht

Ähm zum darübergeposteten Beitrag bekomm ich mehr Errors:
Codeerror 029: invalid expression, assumed zero error 029: invalid expression, assumed zero error 029: invalid expression, assumed zero fatal error 107: too many error messages on one lineCode:
Code
Alles anzeigennew userid = strval(inputtext); if(!IsNumeric(inputtext)) return SendClientMessage(playerid, COLOR_WHITE, "{FF8484}Ungütltige{FFFFFF} SpielerID!"); if(IsPlayerConnected(userid)) { new name[MAX_PLAYER_NAME]; GetPlayerName(userid, name, sizeof(name)); for(new i = 0; i < sizeof(AkteInfo); i++) { if(!strcmp(AkteInfo[i][akte_name],name)) { } } }
Ähm entweder war ich zu blöd um das richtig einzufügen oder habe was falsch gemacht... -
Um welche Zeile geht es denn?
-
Um welche Zeile geht es denn?
In dieser Zeile: -
Wie ist denn AkteInfo und das enum dazu deklariert?
-
-
Das kompiliert bei mir problemlos so.
Der Fehler muss woanders liegen, wahrscheinlich drüber irgendwo. -
Das kompiliert bei mir problemlos so.
Der Fehler muss woanders liegen, wahrscheinlich drüber irgendwo.
Jap mein Fehler, sry trz dank dir für deine Hilfe
Du @Jeffry, hab ne Frage und zwar funktioniert das nun einwandfrei mit der Prüfung ob der Spieler das auch ist, nur es werden falsche Werte ausgegeben...
Code
Alles anzeigennew userid = strval(inputtext); if(!IsNumeric(inputtext)) return SendClientMessage(playerid, COLOR_WHITE, "{FF8484}Ungütltige{FFFFFF} SpielerID!"); if(IsPlayerConnected(userid)) { new name[MAX_PLAYER_NAME]; GetPlayerName(userid, name, sizeof(name)); for(new i = 0; i < sizeof(AkteInfo); i++) { if(!strcmp(AkteInfo[i][akte_name],name)) { return SendClientMessage(playerid, COLOR_WHITE, "Spieler konnte {FF8484}nicht{FFFFFF} gefunden werden."); } else { new str2[50]; PlayerTextDrawShow(playerid, AktenBox[playerid][7]); format(str2, sizeof(str2),"%s", AkteInfo[i][akte_grund1]); // Wird falscher Wert ausgegeben... PlayerTextDrawSetString(playerid, AktenBox[playerid][7], str2); } } } else SendClientMessage(playerid, COLOR_WHITE, "Spieler ist {FF8484}Offline{FFFFFF}!");Habe 2 User in dieser Tabelle und mir wird der 1. Grund vom ersten User angezeigt und nicht was bei mir steht.
Was habe ich denn Falsch gemacht? Bin bezüglich solcher Abfragen meist verwirrt woher er weiß welche Daten er wem zuweist...Könntest du mir weiterhelfen?
-
Versuche es so:
new userid = strval(inputtext);
if(!IsNumeric(inputtext)) return SendClientMessage(playerid, COLOR_WHITE, "{FF8484}Ungütltige{FFFFFF} SpielerID!");
if(IsPlayerConnected(userid))
{
new name[MAX_PLAYER_NAME], str2[50], bool:found;
GetPlayerName(userid, name, sizeof(name));
for(new i = 0; i < sizeof(AkteInfo); i++)
{
if(!strcmp(AkteInfo[i][akte_name],name) && strlen(AkteInfo[i][akte_name])) //!strcmp heißt strcmp == 0. strcmp gibt 0 zurück, wenn beide Strings identisch sind, daher !strcmp.
{
PlayerTextDrawShow(playerid, AktenBox[playerid][7]);
format(str2, sizeof(str2),"%s", AkteInfo[i][akte_grund1]);
PlayerTextDrawSetString(playerid, AktenBox[playerid][7], str2);
found = true;
break;
}
}
if(!found) return SendClientMessage(playerid, COLOR_WHITE, "Spieler konnte {FF8484}nicht{FFFFFF} gefunden werden.");
}
else SendClientMessage(playerid, COLOR_WHITE, "Spieler ist {FF8484}Offline{FFFFFF}!"); -
Danke, funktioniert einwandfrei

-
Funktioniert klasse. Möchte jetzt den Spieler eine Waffe geben sobald er das PickUp aufnimmt.
Könnte das jetzt per OnPlayerPickUpPickUp machen, aber habe folgendes gelesen nur scheint das nicht zu klappen:
"Certain pickup types come with 'automatic responses', for example using an M4 model in the pickup will automatically give the player the weapon and some ammo. For fully scripted pickups, type 1 should be used."
Erhalte nicht automatisch eine Waffe/Munition, weiß nicht woran das liegt. Also müsste ich das denke ich per Public selber lösen, aber wie überprüfe ich welches Pickup Model der Spieler aufgehoben hat sodass ich ihn die entsprechende Waffe geben kann?
Mein Public schaut aktuell so aus:
public OnPlayerPickUpPickup(playerid, pickupid)
{
for(new i = 0; i < MAX_PLAYERS; i++) {
if(eventweapon[i] == pickupid) {
//Hier eventuell waffen geben...
DestroyPickup(eventweapon[i]);
eventweapon[i] = -1;return 1;
}
}
return 1;
} -
