[SAMMELTHREAD] Kleine Scripting Fragen
- Rafelder
- Unerledigt
-
-
Hatte das schon durch die Suchfunktion bekommen, doch das Programm kann ich nicht herunterladen.
This account's public links are generating too much traffic and have been temporarily disabled!
-
Wofür das Programm? Das geht so einfach manuell.
Alternativ drücke einfach auf den download und nimm darüber den direkten Link.
https://dl.dropboxusercontent.…j5NRHPGQcg76KUUACEEw?dl=1Das dürfte der Link sein, falls es das mobile Design nicht anders hat.
Oder schau mal hier:
http://m.youtube.com/watch?v=u87wJd8rOsQ -
Danke, habe zurzeit ein Probleme mit dem Login/Register System. Das Problem ist, das ich Befehle ausführen kann indem ich F5 drücke (Textfeld öffnet sich) und ich die Befehle eingeben kann ohne gekickt zu werden. Ich habe zwar eine Kick Funktion drin das wenn man das Passwortfeld schließt, aber nicht wenn man Befehle ausführt.
Außerdem wird der Spieler gespawnt wenn ich ein falsches Passwort eingebe.
Hier meine Publics
Spoiler anzeigen
public OnPlayerConnect(playerid)
{
PlayAudioStreamForPlayer(playerid, "dl.dropboxusercontent.com/s/6zmyjochwhilhzl/KC.mp3?dl=0");
if(fexist(UserPath(playerid)))
{
INI_ParseFile(UserPath(playerid), "LoadUser_%s", .bExtra = true, .extra = playerid);
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_INPUT,""COL_WHITE"Login",""COL_WHITE"Type your password below to login.","Login","Quit");
}
else
{
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT,""COL_WHITE"Registering...",""COL_WHITE"Type your password below to register a new account.","Register","Quit");
}
new string[520];
playersonline++;
new Name[MAX_PLAYER_NAME];
GetPlayerName(playerid, Name, MAX_PLAYER_NAME);
format(string,sizeof string,"{007DFF}%s{FEFEFE} has joined the server! There are currently {007DFF}%d{FEFEFE} player(s) online.",Name,playersonline);
SendClientMessageToAll(COLOR_GREEN, string);
TextDrawShowForPlayer(playerid, Textdraw0);
return 1;OnPlayerRequestClass
Spoiler anzeigen
public OnPlayerRequestClass(playerid, classid)
{
SetSpawnInfo(playerid,0,12,280.9249,1359.5286,10.5859,172.2551,24,500,34,500,0,0);
if(PlayerInfo[playerid][pBanned] == 1)
{
Ban(playerid);
}
SetPlayerPos(playerid, 280.9249,1359.5286,10.5859);
SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);Spoiler anzeigen SpawnPlayer(playerid);
return 1;
}OnPlayerSpawn
Spoiler anzeigen
public OnPlayerSpawn(playerid)
{
StopAudioStreamForPlayer(playerid); // Stop the audio stream
SetPlayerHealth(playerid, 100);
SetPlayerArmour(playerid, 100);
GivePlayerWeapon(playerid, 24, 500);
GivePlayerWeapon(playerid, 34, 300);Spoiler anzeigen return 1;
}Ich hatte außerdem mal ein Code eingefügt um die Spawnbuttons zu entfernen, dachte es ist vielleicht wichtig das zu erwähnen.
-
Wie kann man die Vehicle Skins auf ein textdraw anzeigen? Ich mein gibt es eine Funktion für die Vehicles so wie GetPlayerSkin(playerid); ?
-
-
Folgendes Beispiel:
Ich habe meine Kamera an einen anderen Punkt verfrachtet. Nun möchte ich mit den Pfeiltasten die Kamera bewegen. An sich funktioniert das schon.
Die Kamera ist aus der Luft auf einen Punkt auf dem Boden gerichtet.
Nun möchte ich mit den Pfeiltasten nach oben und unten die Cam auch in Blickrichtung nach vorne / zurück verschieben und mit den Pfeiltasten links und rechts nach links und rechts.An sich kam mir natürlich die Idee, einfach die Y Koordinate zu erhöhen / verringern, um nach vorne und zurück zu wandern, aber je nachdem wie die Kamera ausgerichtet ist, klappt das ja natürlich nicht.
Kleine Skizze (Sicht aus Kameraperspektive):
Ich hoffe, ihr habt mein Problem verstanden.
Danke im Voraus.
Push -
Hey,
hier ein Laborcheck wo man die DNA eingeben muss und man dann die Daten des Opfers rausbekommt.
hier der Code:
ocmd:laborcheck(playerid, params[])
{
new DNA[124], query[256];
if(!isPlayerInFrakt(playerid,4))return SendClientMessage(playerid,-1,"Du bist nicht bei der Spurensicherung.");
if(sscanf(params,"s",DNA))return SendClientMessage(playerid,-1,"Tippe: /laborcheck [DNA]");
mysql_format(mysqlHandle, query, sizeof(query), "SELECT `Name`, `Level`, `Fraktion`, `DNA`, `Killer`, `KillerWeapon` FROM `accounts` WHERE DNA='%s'",DNA);
mysql_tquery(mysqlHandle, query, "Laborcheck", "d", playerid);
return 1;
}und hier Laborcheck Public
public Laborcheck(playerid)
{
new string[125];
if(!cache_get_row_count()) return SendClientMessage(playerid,0xFF0000FF,"DNA nicht gefunden.");
SendClientMessage(playerid,-1,"Hier die Daten des Spielers: ");
cache_get_row(0, 0, string);
SendClientMessage(playerid,-1,string);
return 1;
}Doch er gibt nur den Namen aus.
-
public Laborcheck(playerid)
{
new string[125];
if(!cache_get_row_count()) return SendClientMessage(playerid,0xFF0000FF,"DNA nicht gefunden.");
SendClientMessage(playerid,-1,"Hier die Daten des Spielers: ");
for(new i;i<cache_get_field_count();i++)
{
cache_get_row(0,i,string);
SendClientMessage(playerid,-1,string);
}
return 1;
}
Ich weiß grade nicht ob das die richtige Funktion ist (cache_get_field_count), damit du die Anzahl der Spalten (Felder) herausbekommst.
Wenn ich mich nicht irre, sollte das so funktionieren. -
Hi Leute ich will einen Heal Befehl machen:
ocmd:heal(playerid,params[])
{
new health;
new receiverid[128];
if(sscanf(params,"ui",receiverid,health))return SendClientMessage(playerid,COLOR_RED,"/heal [playerid] [heal]");
SetPlayerHealth(receiverid,health);
return 1;
}leider bekomme ich beim compilen in dieser zeile (SetPlayerHealth(receiverid,health);) immer ein argument mismatch
-
-
Weil heal ein Float sein muss:
ocmd:heal(playerid,params[])
{
new Float:health,receiverid;
if(sscanf(params,"uf",receiverid,health))return SendClientMessage(playerid,COLOR_RED,"/heal [playerid] [heal]");
SetPlayerHealth(receiverid,health);
return 1;
}mfg.
-
-
new float:health;
new receiverid[128];
Zu
new Float:health;
new receiverid; -
for (new i = 0; i < 13; i++)
{
GetPlayerWeaponData(playerid, i, WaffenSave[playerid][waffe[i]], WaffenSave[playerid][ammo[i]]);
}new WaffenSave[MAX_PLAYERS][WaffenSaveInfo];
enum WaffenSaveInfo
{
Float:waffen_x,
Float:waffen_y,
Float:waffen_z,
waffe[13],
ammo[13]
}Müsste doch eigentlich klappen oder? Die Errors kommen aber in der GetPlayerWeapon Zeile.. Wegen dem waffe[i] und ammo[i]
-
@Schlaubi:
Musst es so schreiben:
GetPlayerWeaponData(playerid, i, WaffenSave[playerid][waffe][i], WaffenSave[playerid][ammo][i]);
mfg.
-
new float:health;
new receiverid[128];
Zu
new Float:health;
new receiverid;danke funktioniert
und jetzt noch eine frage:
ich wollte grad ein mapping einfügen und bekomme beim kompilen folgenden error: symbol already defined: "CreateObject" -
danke funktioniert
War es wirklich zu schwer, es aus meinem Beitrag abzulesen?symbol already defined: "CreateObject"
Du darfst das ja auch nicht irgendwo in dein Script klatschen...sondern z.B. unter OnGameModeInit -
PushDu kannst diesen Codeschnipsel von meinem abseil skript nehmen , da wird egal wie der Spieler steht die Koordinate hinter ihm ermittelt.
GetPlayerPos(playerid,Pos[0],Pos[1],Pos[2]);
GetPlayerFacingAngle(playerid,Pos[3]);
Pos[0] += 2.0 * -floatsin(-Pos[3], degrees);
Pos[1] += 2.0 * -floatcos(-Pos[3], degrees);was GetPlayerPos dies musst du bei der Kamera gegen GetPlayerCameraPos ersetzen , den Winkel musst du dir von irgend einem Bezugspunkt errechnen lassen , da kannst du ja bissle rum probieren
via atan(Yb - Ya, Xb - Xa) bekommst du den winkel dazwischen raus. und einen neuen LookAt Punkt kannst du via GetPlayerCameraFrontVector erechnen , da gibt es auch ein beispiel im Wiki. -
Die Variable: "adminsys" wird nicht ausgelesen bzw funktioniert nicht. Bevor ich das Textdraw & SetPlayerColor eingefügt habe funktionierte alles reibungslos,
nun ja jetzt bin ich verwirrt und ich blick nicht mehr durch.der Befehl
ocmd:adienst(playerid,params[])
{
if(!IsAdmin(playerid,1))return 1;
new str_1[145],bool:adienstsys;
new Text3D:AdminDutyLabel[MAX_PLAYERS];
new Float:X,Float:Y,Float:Z;
GetPlayerPos(playerid,X,Y,Z);
AdminDutyLabel[playerid] = Create3DTextLabel("SUPPORT",C_LIGHTBLUE,X,Y,Z,40.0,0,0);
if(adienstsys == false)
{
spieleraduty[playerid] = true;
adienstsys = true;
SetPlayerColor(playerid,0x00DFDFFF);
Attach3DTextLabelToPlayer(AdminDutyLabel[playerid],playerid,0,0,2);
format(str_1,sizeof(str_1)," SUPPORT INFO: %s hat sich zum Support angemeldet.",sName(playerid));
SendClientMessageToAll(0x008400FF,str_1);
PlayerTextDrawShow(playerid,ADIENSTLABEL[playerid]);
return 1;
}
else if(adienstsys == true)
{
adienstsys = false;
spieleraduty[playerid] = false;
SetPlayerColor(playerid,0xFFFFFFFF);
Delete3DTextLabel(AdminDutyLabel[playerid]);
format(str_1,sizeof(str_1)," SUPPORT INFO: %s hat sich zum Support abgemeldet.",sName(playerid));
SendClientMessageToAll(C_RED,str_1);
PlayerTextDrawHide(playerid,ADIENSTLABEL[playerid]);
return 1;
}
return 1;
}
Es passiert mir leider öfters mit den Booleans, ich versteh es einfach nicht...
-
Du musst das global definieren, ansonsten ist es immer wieder auf false wenn du den Befehl eingibst.
new Text3D:AdminDutyLabel[MAX_PLAYERS],bool:adienstsys;//globalocmd:adienst(playerid,params[])
{
if(!IsAdmin(playerid,1))return 1;
new str_1[145];
new Float:X,Float:Y,Float:Z;
GetPlayerPos(playerid,X,Y,Z);
AdminDutyLabel[playerid] = Create3DTextLabel("SUPPORT",C_LIGHTBLUE,X,Y,Z,40.0,0,0);
if(adienstsys == false)
{
spieleraduty[playerid] = true;
adienstsys = true;
SetPlayerColor(playerid,0x00DFDFFF);
Attach3DTextLabelToPlayer(AdminDutyLabel[playerid],playerid,0,0,2);
format(str_1,sizeof(str_1)," SUPPORT INFO: %s hat sich zum Support angemeldet.",sName(playerid));
SendClientMessageToAll(0x008400FF,str_1);
PlayerTextDrawShow(playerid,ADIENSTLABEL[playerid]);
return 1;
}
else if(adienstsys == true)
{
adienstsys = false;
spieleraduty[playerid] = false;
SetPlayerColor(playerid,0xFFFFFFFF);
Delete3DTextLabel(AdminDutyLabel[playerid]);
format(str_1,sizeof(str_1)," SUPPORT INFO: %s hat sich zum Support abgemeldet.",sName(playerid));
SendClientMessageToAll(C_RED,str_1);
PlayerTextDrawHide(playerid,ADIENSTLABEL[playerid]);
return 1;
}
return 1;
}