http://wiki.sa-mp.com/wiki/OnPlayerGiveDamage
=>
playerid The ID of the player that gave damage.
damagedid The ID of the player that received damage.
du musst also abfragen ob "damagedid" aond ist etc und ihm auch die hp setzen.
http://wiki.sa-mp.com/wiki/OnPlayerGiveDamage
=>
playerid The ID of the player that gave damage.
damagedid The ID of the player that received damage.
du musst also abfragen ob "damagedid" aond ist etc und ihm auch die hp setzen.
Unter OnPlayerEnterVehicle einfach mal fragen ob er beim >einsteigen< im Gangjail ist. Wenn er es ist machste einfach mal "TogglePlayerControllable" auf 0 und dann wieder auf 1 - das bricht dann das einsteigen ab. Und solltest dann noch ne Nachricht schicken das ausbrechen nicht erlaubt ist.
SetParkPlatz(playerid,Autohaus);
OnPlayerCarLogin(playerid);
- Bitte mal diese beiden schicken.
Schöne Idee aber eine verbesserungs Idee:
man sollte es ebenso einstellen können das bestimmtes Wetter Täglich ist.
Sehr schöne Idee 9/10 Punkten da es nurnoch besser werden könnte durch einen eigenen Interior & durch Lieferwagen wenn es ein Versandzentrum ist.
Also Preis ist ja abhängig vom eingestellten Preis - versuch dazu mal sofern es ein Godfather ist "/edit price 1" an dem Haus. Ansonsten halt einfach den Preis in der Variable für den Hauspreis irgendwo im Script umstellbar machen.
Das Gleiche gilt eigtl. auch für "Rent & Miete". Da solltest du dann deine normalen Befehle anwenden.
Oder simpel: Server ausschalten und in der MySQL Datenbank die Daten richtig eintragen dann siehst du, ob es am Laden liegt oder an der Speicherung.
Nicht sonderlich schwierig und hier ist ein 1A Tutorial: [ SCRIPTING ] MySQL (Installation, Zugriff, Einstellungen, Login & Register Beispiel)
if(strcmp(cmd, "/setlohn", true) == 0)
{
if(IsPlayerConnected(playerid))
{
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_GRAD2, "Benutzung: /setlohn [Spieler ID / Name] [Lohn / Payday]");
return 1;
}
new playa;
playa = ReturnUser(tmp);
new gehalt;
tmp = strtok(cmdtext, idx);
gehalt = strval(tmp);
if (PlayerInfo[playerid][pLeader] >= 1)
{
if(IsPlayerConnected(playa))
{
if(PlayerInfo[playerid][pLeader] == PlayerInfo[playa][pMember] || PlayerInfo[playerid][pLeader] == PlayerInfo[playa][pLeader])
{
if(gehalt < 0 || gehalt > 10000) return SendClientMessage(playerid, COLOR_RED," Der Lohn muss zwischen 0 und 10000 liegen!"); // Hier muss ja sein das "gehalt" unter 0 ist oder über 10.000
PlayerInfo[playa][pGehalt] = gehalt;
GetPlayerName(playa, giveplayer, sizeof(giveplayer));
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), "*Du hast %s Gehalt geändert in %d$.", giveplayer, gehalt);
SendClientMessage(playerid, COLOR_LIGHTBLUE, string);
format(string, sizeof(string), "*%s hat dein Gehalt geändert in %d$.", sendername, gehalt);
SendClientMessage(playa, COLOR_LIGHTBLUE, string);
return 1;
}
}
}
else
{
SendClientMessage(playerid, COLOR_GRAD1, "Dieser Befehl ist nur für Leader einer Fraktion!");
}
}
return 1;
}
Tomsen: denke mal flüchtigkeitfehler habe einen Kommentar in der "gehalt" zeile gemacht.
Also
new string[256];
format(string,sizeof(string), "ZU VERKAUFEN!\nName: %s\nBesitzer: Der Staat\nKaufpreis: %d", BTanke[idx][bName], BTanke[idx][bPrice]);
Create3DTextLabel(BTanke[idx][bName], COLOR_RED, BTanke[idx][bPosX], BTanke[idx][bPosY], BTanke[idx][bPosZ], 20.0, 0, 0);
zu
new string[256];
format(string,sizeof(string), "ZU VERKAUFEN!\nName: %s\nBesitzer: Der Staat\nKaufpreis: %d", BTanke[idx][bName], BTanke[idx][bPrice]);
Create3DTextLabel(string, COLOR_RED, BTanke[idx][bPosX], BTanke[idx][bPosY], BTanke[idx][bPosZ], 20.0, 0, 0); // hier das BName zu string ändern sonst wird es nichts!
Lies das von RG mal gründlich dann siehst du das er recht hat & dein Problem gelöst hat. Du würdest mit deiner aktuellen Variante nur den "Name: %s" nutzen bzw was da hin sollte.
Welche ist deiner Meinung nach denn die gewöhnliche Arena?
warum eig 2 Threads?!
new fraktion = 0;
if(PlayerInfo[playerid][pMember] > 0) fraktion = PlayerInfo[playerid][pMember] - 1;
if(PlayerInfo[playerid][pLeader] > 0) fraktion = PlayerInfo[playerid][pLeader] - 1;
FraktionsKasse[fraktion] += preis/2;
GivePlayerMoney(playerid,preis/2);
SaveFraktionsKassen();
Tipp bei Givelicense nutze einfach #defines:
#define KOSTEN_AUTOFÜHRERSCHEIN 5000 // Wären $5000
// Unter /givelicense vor der Abfrage mit "driving"
new fraktion = 0;
if(PlayerInfo[playerid][pMember] > 0) fraktion = PlayerInfo[playerid][pMember] - 1;
if(PlayerInfo[playerid][pLeader] > 0) fraktion = PlayerInfo[playerid][pLeader] - 1;
// Dazu unter /givelicense in driving:
new preis = KOSTEN_AUTOFÜHRERSCHEIN;
GivePlayerMoney(giveplayerid,-preis);
FraktionsKasse[fraktion] += preis/2;
GivePlayerMoney(playerid,preis/2);
SaveFraktionsKassen();
ungetestet sollte aber so gehn
Sehr schönes System und zumindest in Version 1 also der mit der Pastebin ist ein Fehler drinne:
- Die Sekunden 0-9 sind immer so angezeigt ( restliche Flaggenzeit
1:5
statt
1:05
Aber an sich: Top system geht wohl nicht besser
new Cops = 0;
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
if(PlayerInfo[i][pMember] == 1 || PlayerInfo[i][pLeader] == 1 || PlayerInfo[i][pLeader] == 2 || PlayerInfo[i][pMember] == 2 || PlayerInfo[i][pLeader] == 3 || PlayerInfo[i][pMember] == 3)
{
Cops += 3; // Es wird sogar nur ein Cop benötigt wg deinem Script^^
}
}
}
Kopier den Code mal 1zu1 aus deinem Script und poste ihn erneut - so kann man ihn nicht lesen geschweige denn dir helfen. Bei dem langzeilen Code kann keiner durchblicken und warum sollten die Helfer sich die mühe machen deinen Code zu entziffern.
Für Selfmade oder Godfather? Sofern es ein Selfmade ist müsstest du uns deine Job Definition geben & sagen was du willst.
public OnPlayerRequestClass(playerid, classid)
{
SetPlayerPos(playerid, 487.9458, -5.9515, 1002.0867);
SetPlayerFacingAngle(playerid, 180); SetPlayerInterior(playerid, 17);
SetPlayerCameraPos(playerid, 487.8283, -11.4869, 1001.7832);
SetPlayerCameraLookAt(playerid, 487.8446, -10.4885, 1001.7479);
switch(classid) {
case 0,1,2,3,4: Team[playerid] = 1;
default: Team[playerid] = 0;
}
if(classid == 0 || classid == 1 || classid == 2 || classid == 3 || classid == 4)
{
SetPlayerColor(playerid, COLOR_GREY);
GameTextForPlayer(playerid, "~w~Yakuza", 1500, 6);
}
else if(classid == 5 || classid == 6 || classid == 7 || classid == 8 || classid == 9)
{
SetPlayerColor(playerid, COLOR_BLUE);
GameTextForPlayer(playerid, "~b~Triaden", 1500, 6);
}
else if(classid == 10 || classid == 11 || classid == 12 || classid == 13 || classid == 14)
{
SetPlayerColor(playerid, COLOR_GSF);
GameTextForPlayer(playerid, "~g~Grove Street", 1500, 6);
}
return 1;
}
1. Code mal übersichtlich.
2. Hier ist kein SetPlayerPos bei den Triaden / Yakuza also ist hier auch nicht die festlegung der Spawn Position.
Kuck mal unter "OnPlayerSpawn" bzw sende diesen an uns.
Alles anzeigenstock LoadPlayer(playerid)
{
if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid))//Wir fragen ab ob der angegebene Spieler auch Online ist, und kein NPC ist (nur zur sicherhheit)
{
GetPlayerName(playerid, SpielerInfo[playerid][pName], MAX_PLAYER_NAME); //Wir Speichern den Namen des Spielers in der Variable [i]SpielerInfo[playerid][pName][/i]
SpielerInfo[playerid][pLevel] = mysql_GetInt("accounts", "Level", "Name", SpielerInfo[playerid][pName]); //Wir holen uns den wert der unter "Level" eingetragen ist und Speichern ihn in unserer Variable.
SpielerInfo[playerid][pGeld] = mysql_GetInt("accounts", "Geld", "Name", SpielerInfo[playerid][pName]); //Wir holen uns den wert der unter "Geld" eingetragen ist und Speichern ihn in unserer Variable.
SpielerInfo[playerid][pKills] = mysql_GetInt("accounts", "Kills", "Name", SpielerInfo[playerid][pName]); //Wir holen uns den wert der unter "Kills" eingetragen ist und Speichern ihn in unserer Variable.
SpielerInfo[playerid][pTode] = mysql_GetInt("accounts", "Tode", "Name", SpielerInfo[playerid][pName]); //Wir holen uns den wert der unter "Tode" eingetragen ist und Speichern ihn in unserer Variable.
}
return 1;
}
stock mysql_GetInt(Table[], Field[], Where[], Is[])
{
new query[128];
mysql_real_escape_string(Table, Table);
mysql_real_escape_string(Field, Field);
mysql_real_escape_string(Where, Where);
mysql_real_escape_string(Is, Is);
format(query, 128, "SELECT `%s` FROM `%s` WHERE `%s` = '%s'", Field, Table, Where, Is);
mysql_query(query);
mysql_store_result();
new sqlint = mysql_fetch_int();
mysql_free_result();
return sqlint;
}
Als erklärung:
mysql_GetInt gibt den Integer zurück, der an der angegebenen Position in der angegebenen Tabelle liegt.
- Table[] - Die Tabelle in der der Wert liegt.
- Field[] - Das Feld (die Spalte) in der der Wert liegt.
- Where[] - Das Feld (die Spalte) in der Nach der Bedingung gesucht wird.
- Is[] - Die bedingung um die richtige Reihe zu finden.
mysql_GetInt("accounts", "Level", "Name", SpielerInfo[playerid][pName])
stock SavePlayer(playerid)
{
if(IsPlayerConnected(playerid) && !IsPlayerNPC(playerid)) //wir überprüfen ob der Spieler überhaupt noch Connected ist und ob er nicht ein NPC ist.
{
if(GetPVarInt(playerid,"Eingeloggt") == 1) //Und hier ob er noch eingeloggt ist.
{
//Nun speichern wir die Daten in der Datenbank.
mysql_SetInt("accounts", "Level", SpielerInfo[playerid][pLevel], "Name", SpielerInfo[playerid][pName]);
mysql_SetInt("accounts", "Geld", SpielerInfo[playerid][pGeld], "Name", SpielerInfo[playerid][pName]);
mysql_SetInt("accounts", "Kills", SpielerInfo[playerid][pKills], "Name", SpielerInfo[playerid][pName]);
mysql_SetInt("accounts", "Tode", SpielerInfo[playerid][pTode], "Name", SpielerInfo[playerid][pName]);
mysql_SetFloat("accounts", "Health", SpielerInfo[playerid][pHealth], "Name", SpielerInfo[playerid][pName]);
}
}
return 1;
}
Und die Funktionen mysql_SetInt, mysql_SetFloat und mysql_SetString kommen direkt da drunter (mysql_SetString benutzen wir zwar nicht, aber falls ihr mal strings speichern wollt habt ihr diese direkt parat).
stock mysql_SetInt(Table[], Field[], To, Where[], Where2[])
{
new query[128];
mysql_real_escape_string(Table, Table);
mysql_real_escape_string(Field, Field);
mysql_real_escape_string(Where, Where);
mysql_real_escape_string(Where2, Where2);
format(query, 128, "UPDATE `%s` SET `%s` = '%d' WHERE `%s` = '%s'", Table, Field, To, Where, Where2);
mysql_query(query);
return true;
}
Als erklärung:
mysql_SetInt "Updatet" den Wert der an der Angegebenen Stelle in der Tabelle liegt, auf den neuen Wert den wir angegeben haben.
Table[] - Die Tabelle in der der Wert verändert werden soll.
Field[] - Das Feld (die Spalte) in der der Wert verändert werden soll.
To - Der Wert der an der in das Angegebene feld eingetragen werden soll.
Where[] - Das Feld (die Spalte) in der Nach der Bedingung gesucht wird.
Where2[] - Die bedingung um die richtige Reihe zu finden.
[pwn]mysql_SetInt("accounts", "Level", SpielerInfo[playerid][pLevel], "Name", SpielerInfo[playerid][pName]);
heisst also, wir gehen in die Tabelle "accounts", und ändern den Wert der in der Spalte "Level" steht, auf den Wert den wir angegebene haben (SpielerInfo[playerid][pLevel]), da wo in der Spalte "Name" unsere bedingung (SpielerInfo[playerid][pName]) steht.</a_mysql></a_mysql>
Das ist aus dem Tutorial Link von Tround also nutze mal dein Gehirn, lies das Tutorial durch und versuche es damit zu schaffen. Fragen kannst du danach ja immernoch stellen.