Hey,
ich habe gerade zwei Fragen bzw. Probleme. Zu meiner ersten Frage. Ich habe einen Listdialog erstellt, der alle meiner privaten Fahrzeuge anzeigt. Nun will ich wenn ich auf eines klick, dass es zu mir teleportiert wird. Nur müsste ich dazu durch mein Car Enum loopen, sodass es den z.B 5ten Eintrag anzeigt, bei dem eine bestimmte Kondition (in meinem Fall Besitzer des Fahrzeuges) erfüllt ist. Wie mache ich das ? Ich habe schon etwas gemacht, aber das funktioniert noch nicht ganz.
if(dialogid==19){
if(response){
new Float:vehX,Float:vehY,Float:vehZ;
GetPlayerPos(playerid,vehX,vehY,vehZ);
for(new i=0;i<sizeof(cInfo);i++){
if(cInfo[i][besitzer] != sInfo[playerid][id0]) continue;
SetVehiclePos(cInfo[i][id_x],vehX,vehY+2,vehZ);
}
}
}
Und jetzt zu meinem anderen Problem. Ich hatte schonmal vor ein paar Tagen Hilfe mit der Konvertierung von Groß- zu Kleinbuchstaben bekommen. Nur wenn jetzt in meinem Fall z.B. statt GERMANY, Germany angezeigt werden soll kommen nur komische Zeichen. So probiere ich es:
stock lower_case(string[])
{
for(new i = 1, len = strlen(string); i < len; i++)
{
string[i]=tolower(string[i]);
}
return string;
}
format(string, sizeof(string), "{FF9900}%s{FFFFFF} has joined the server from %s", getPlayerName(playerid),lower_case(GetPlayerCountry(playerid)));
SendClientMessageToAll(COLOR_ORANGE,string);
Beiträge von Oskaar1994
-
-
Ich denke das macht er weil er will, dass jeder Spieler seine eigene Welt bekommt.
Guck dir mal:
SetPlayerVirtualWorld(playerid,playerid);
an.
Soweit ich weiß ist das FalschMFG
-
Danke Leute Und InternetInk es war eine Datenbank die ich in die Scriptsfiles hochgeladen habe
*edit*
Habe ein kleines Problem. Ingame wird nur das ausgegeben:
Blabla has joined the server from ",
Hier mein Code:
new pname[MAX_PLAYER_NAME], string[128+MAX_PLAYER_NAME];
GetPlayerName(playerid,pname,sizeof(pname));
format(string, sizeof(string), "{FF9900}%s{FFFFFF} has joined the server from {FF9900}%s", pname,lower_case(GetPlayerCountry(playerid)));
SendClientMessageToAll(COLOR_ORANGE, string);
An der GetPlayerCountry Funktion sollte es nicht liegen, da es sonst auch immer ging.
*edit2*Jetzt sagt es immer:
Blabla has joined the server from Hä
Manchmal zeigt es auch statt "Hä" nur irgendwelche Zeichen -
Es wäre viel zu umständlich jedes einzelne Land aus der Datenbank abzufragen. Stell dir vor ich habe ja über 100 Länder.
-
Hey,
ich habe jetzt schon verschiedene Funktionen ausprobiert, aber habe es noch nicht wirklich hinbekommen. Mein Problem ist ich habe eine Funktion die mir das Land des Spielers zurück gibt. Nur leider in Großbuchstaben. Daher habe ich probiert diese Großbuchstaben zu kleinen ( bis auf den Anfangsbuchstaben) zu konvertieren. Hat bisher nicht wirklich geklappt. Hätte jeamand eine Funktion oder ein Makro, das mir einen String komplett bis auf den ersten Buchstaben zu Kleinbuchstaben konvertiert ? Wäre nett -
stock Closevillator2(){
MoveDynamicObject(villator2, 2195.513671875, 433.19458007813, 24.297842025757, 5.0);
return 1;
}stock Closevillator1()
{
MoveDynamicObject(villator1, 2193.7368164063, 612.29736328125, 12.809358596802, 5.0);
return 1; } -
Oskar's Scripting Service
-closed-
[Folgendes muss im Thema enthalten sein und darf nicht entfernt werden:]
______
Unverbindlicher Hinweis: Die Sicherheit einer Transaktion kann am besten durch die Einschaltung eines Mittelsmannes gewährleistet werden. Weitere Informationen dazu gibt es hier. -
Hey,
ich wurde auf meinem Server jetzt schon ein paar mal fälschlicher Weise wegen Moneyhack gebannt. Es passiert nur wenn ich etwas kaufe bzw. Geld verliere. Daher denke ich ist meine alternative Geldgebefunktion möglichwerweise nicht für negative Zahlen geeignet. Hier der Code:
public GivePlayerMoneyEx(playerid,ammount)
{
OldMoney[playerid] = GetPlayerMoney(playerid);
NewMoney[playerid] += ammount;
GivePlayerMoney(playerid,ammount);
return 1;
}
Es passiert nur dann wenn ich z.B das hier mache:
GiverPlayerMoneyEx(playerid,-500);
Wie schon gesagt es passiert nicht immer, aber es ist schon um die 3 mal passiert. -
Kennst du dich auch mit SMF Themes aus oder entwickelst du nur für WCF ?
MfG -
Hey,
habe da mal 2 Fragen bezüglich Timern. Die erste Frage wäre, ist es nötig einen Timer zu killen, der sich nicht wiederholt ? Und zu meine zweiten Frage. Darauf hatte ich schon mehrere Antworten bekommen. Undzwar wenn ich einen Timer für nur einen Spieler aufsetze, was muss die Funktion returnen ? 1? playerid ? Gar nichts ? Hier ein Beispiel:
SetTimerEx("test",10000,0,"i",playerid);//Hier setze ich meinen Timer auf
public Test(playerid)
{
SendClientMessage(playerid,COLOR_RED,"Blabla");
// Was muss jetzt hier return werden ?
//return 1; ?
//return playerid; ?
// Gar nichts ?
}
Wäre nett, wenn mir jemand die zwei Fragen beantworten könnte -
Habe gemerkt, dass das PutPlayerInVehicle hier unnötig ist, da es eh schon in meiner CreatePlayerCar Funktion ist. Dennoch funktioniert sie nicht ganz. Das Auto wird zwar erstellt und gespeichert, aber ich werde nicht hinein gesetzt und das 3D Text Lable wird auch nicht erstellt.
createPlayerCar(playerid,modelid,Float:px,Float:py,Float:pz,Float:pr,color1,color2)
{
for(new i=0; i<sizeof(cInfo); i++)
{
if(cInfo[i][id_x]!=0)continue;
cInfo[i][besitzer]=sInfo[playerid][id0];
cInfo[i][c_x]=px;
cInfo[i][c_y]=py;
cInfo[i][c_z]=pz;
cInfo[i][c_r]=pr;
cInfo[i][vcolor1]=color1;
cInfo[i][vcolor2]=color2;
cInfo[i][model]=modelid;
cInfo[i][id_x] = CreateVehicle(modelid,px,py,pz,pr,color1,color2,500);
sInfo[playerid][vehicles] = sInfo[playerid][vehicles]+1;
saveCarToDB(playerid,i);
savePlayer(playerid);
new id=getFreeCarID();
new ownertext[128];
new ownername[MAX_PLAYER_NAME];
GetPlayerName(playerid,ownername,sizeof(ownername));
format(ownertext,sizeof(ownertext),"%s\nOwner %s",GetVehicleName(cInfo[id][id_x]),ownername);
ownedtext[cInfo[id][id_x]] = Create3DTextLabel( ownertext, COLOR_GREEN, 0.0, 0.0, 0.0, 30.0, 0, 1 );
Attach3DTextLabelToVehicle( ownedtext[cInfo[id][id_x]] ,cInfo[id][id_x], 0.0, 0.0, 0.5);
PutPlayerInVehicle(playerid,cInfo[i][id_x],0);
}
return 1;
} -
Hey,
habe ein kleines Problem mit meinem Autohaussystem. Wenn mein Auto erstellt wird, soll ich in es hinein gesetzt werden und es soll eine Nachricht im Chat erscheinen. Das Auto wird zwar erstellt, aber ich werde nicht rein gesetzt und die Nachricht im Chat erscheint auch nicht.
if(dialogid==11)
{
if(response)
{
new id=GetPVarInt(playerid,"buyCarID");
if(GetPlayerMoney(playerid)< GetVehiclePrice(id))
{
SendClientMessage(playerid,COLOR_RED,"You don't have enough money to buy this vehicle.");
return 1;
}
if(sInfo[playerid][vehicles]>=sInfo[playerid][slots])
{
SendClientMessage(playerid,COLOR_RED,"You don't have enough free vehicle slots to buy a vehicle. Sell one of your vehicles first or buy a house with higher vehicle slots");
return 1;
}
GivePlayerMoneyEx(playerid,-GetVehiclePrice(id));
new boughtcar[MAX_VEHICLES];
for(new i=0;i<sizeof(DealershipVehicles);i++){
if(DealershipVehicles[i][modelid_veh] == id)
{
boughtcar[playerid] = createPlayerCar(playerid,id,ahInfo[DealershipVehicles[i][Dealer_id]][s_x],ahInfo[DealershipVehicles[i][Dealer_id]][s_y],ahInfo[DealershipVehicles[i][Dealer_id]][s_z],ahInfo[DealershipVehicles[i][Dealer_id]][s_r],-1,-1);
PutPlayerInVehicle(playerid,boughtcar[playerid],0);
new buyFormat[250];
format(buyFormat,sizeof(buyFormat),"%s has bought a %s at %s",getPlayerName(playerid),GetVehicleNameFromModel(id),ahInfo[DealershipVehicles[i][Dealer_id]][DealerName]);
SendClientMessageToAll(COLOR_ORANGE,buyFormat);
break;
}
}
}
return 1;
} -
Ups es lag nicht an der Funktion, hatte wo anders einen kleinen Fehler. Trotzdem danke
-
Habe mir eine kleine Funktion gebastelt, scheint aber nicht zu funktionieren :
stock GetVehiclePrice(VehModelID)
{
new veh_price;
for(new i=0;i<sizeof(DealershipVehicles);i++){
if(DealershipVehicles[i][modelid_veh] != VehModelID) continue;
veh_price = DealershipVehicles[i][price];
}
return veh_price;
} -
Hey,
bin gerade dabei ein eigenes Autohaussystem zu schreiben. Es soll immer einen Dialog mit dem Namen und dem Preis des Autos anzeigen. Nur würde mein Script, bei der Abfrage wie ich sie benutze sehr lang werden. Wie kann ich das kürzer machen also quasi einer ModelID einen Preis bzw. Wert zuweißen ? So habe ich es im Moment.
if(modelid == 411){
new vehiclestring[256];
format(vehiclestring,sizeof(vehiclestring),"Are you sure you want to buy this %s for %i$ ?",GetVehicleName(modelid),PRICE_INFERNUS);
ShowPlayerDialog(playerid,11,DIALOG_STYLE_MSGBOX,"Buy",vehiclestring,"Yes","No");
}
if(modelid == 402){
new vehiclestring[256];
format(vehiclestring,sizeof(vehiclestring),"Are you sure you want to buy this %s for %i$ ?",GetVehicleName(modelid),PRICE_BUFFALO);
ShowPlayerDialog(playerid,11,DIALOG_STYLE_MSGBOX,"Buy",vehiclestring,"Yes","No");
}
Wie kann ich es irgendwie so in der Art machen :
new vehiclestring[256];
format(vehiclestring,sizeof(vehiclestring),"Are you sure you want to buy this %s for %i$ ?",GetVehicleName(modelid),PRICE_modelid);
ShowPlayerDialog(playerid,11,DIALOG_STYLE_MSGBOX,"Buy",vehiclestring,"Yes","No");
Hilfe wäre nett -
Danke, ich werde es mal probieren. Eine Frage, was hast du den genau verändert ?
-
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{if(newkeys & (KEY_SPRINT))
{
if(IsPlayerInRangeOfPoint(playerid, 5.0, 1344.98877, 1244.95239, 41.18820))
{
ShowPlayerDialog(playerid,4,DIALOG_STYLE_LIST,"Spectate RW","Runway 69 North\nRunway 69 South\nRunway 5 North\nRunway 5 South","Spectate","Close");
}
else if(IsPlayerInRangeOfPoint(playerid, 5.0, 1623.52991, -2286.77075, 94.26330))//LS
{
ShowPlayerDialog(playerid,5,DIALOG_STYLE_LIST,"Spectate RW","Runway 69 West\nRunway 69 East\nRunway 5 West\nRunway 5 East","Spectate","Close");
}
else if(IsPlayerInRangeOfPoint(playerid, 5.0, -1275.72742, 56.47289, 74.24910))//sf
{
ShowPlayerDialog(playerid,6,DIALOG_STYLE_LIST,"Spectate RW","Runway 69 North\nRunway 69 South","Spectate","Close");
}
return 1;
}
//----------------------------------------------------------------------------------CART----------------------------------------------------------------
if (CartState[playerid] == 1){
if (newkeys & (KEY_SECONDARY_ATTACK )){
new Float:oX,Float:oY,Float:oZ;
GetPlayerPos(playerid,oX,oY,oZ);
RemovePlayerFromVehicle(playerid);
SetPlayerPos(playerid,oX,oY,oZ+1);
DestroyObject(CartObj[playerid]);
DestroyVehicle(CartID[playerid]);
CartState[playerid] = 0;
}
return 1;
}
//---------------------------------haussystem-----------------------------------------------------------------------------------------------------------
if(newkeys & (KEY_SECONDARY_ATTACK)){
for(new i = 0; i != MAX_HOUSES; i++) {
if(IsPlayerInCheckpoint(playerid) && IsPlayerInDynamicCP(playerid, hausInfo[i][hCpID])){
SetPlayerPos(playerid, hausInteriorData[hausInfo[i][hInterior]][iX], hausInteriorData[hausInfo[i][hInterior]][iY], hausInteriorData[hausInfo[i][hInterior]][iZ]);
SetPlayerVirtualWorld(playerid, hausInfo[i][hID]);
SetPlayerInterior(playerid, hausInteriorData[hausInfo[i][hInterior]][iInterior]);
break;
}
}
new playerWorld = GetPlayerVirtualWorld(playerid);
if(playerWorld != 0) {
for(new i = 0; i != MAX_HOUSES; i++) {
if(hausInfo[i][hID] == playerWorld) {
if(IsPlayerInRangeOfPoint(playerid, 3, hausInteriorData[hausInfo[i][hInterior]][iX], hausInteriorData[hausInfo[i][hInterior]][iY], hausInteriorData[hausInfo[i][hInterior]][iZ])) {
SetPlayerPos(playerid, hausInfo[i][hX], hausInfo[i][hY], hausInfo[i][hZ]);
SetPlayerVirtualWorld(playerid, 0);
SetPlayerInterior(playerid, 0);
break;
}
}
}
}
return 1;
}
//------------------------------------------------------------------------------------------------------------------------------------------------------------
if(newkeys & KEY_NO && GetPlayerState(playerid) == PLAYER_STATE_DRIVER) {
if(GetEngineState(GetPlayerVehicleID(playerid)) == 1){
ToggleEngine(GetPlayerVehicleID(playerid),0);
GameTextForPlayer(playerid, "~r~Engine turned off", 2000, 3);
}
else {
ToggleEngine(GetPlayerVehicleID(playerid),1);
GameTextForPlayer(playerid, "~r~Engine turned on", 2000, 3);
}
return 1;
}return 1;
}
Ich kapiere nur nicht, wieso es bei den anderen Tasten geht und hier eigentlich auch, nur nicht bei mehreren Spielern (wobei es da auch manchmal funktioniert). -
Hey,
hatte schonmal vor ein paar Wochen ein Problem mit OnPlayerKeyStateChange, dass wenn mehr als ein Spieler auf dem Server ist, der Motor nicht mehr angehen will oder nur wenn man tausende 1000mal "n" drückt.
Alle anderen Tasten funktionieren auch mit mehreren Spielern einwandfrei. Danach habe ich es ganz verbugt und es ging garnicht mehr. Jetzt habe ich die Funktion noch mal neu geschrieben und habe wieder das Problem mit mehreren Spielern. Mache ich etwas falsch ? Ich habe noch die Funktionen GetEngineState und ToggleEngine geschrieben, aber daran wird es nicht liegen, denn ohne die Funktionen hat es auch nicht funktioniert.
if(newkeys & KEY_NO && GetPlayerState(playerid) == PLAYER_STATE_DRIVER) {
if(GetEngineState(GetPlayerVehicleID(playerid)) == 1){
ToggleEngine(GetPlayerVehicleID(playerid),0);
GameTextForPlayer(playerid, "~r~Engine turned off", 2000, 3);
}
else {
ToggleEngine(GetPlayerVehicleID(playerid),1);
GameTextForPlayer(playerid, "~r~Engine turned on", 2000, 3);
}
return 1;
} -
Hatte versehentlich die falsche Zeile kopiert
mysql_function_query(dbhandle,"SELECT `ID`,`mixX`,`maxX`,`minY`,`maxY`,`Color` FROM `Zones`",true,"OnGameModeLoadZones","",""); -
Ich habe ja nicht gesagt, dass 255 falsch ist, ich wollte damit nur sagen, dass wenigstens das Speichern geht
Habe jetzt extra mal ein print beim Laden reingemacht aber die Konsole gibt nichts aus.
mysql_function_query(dbhandle, "SELECT `hID`, `hPreis`,`hValue`,`hBesitzer`, `hInterior`, `hX`, `hY`, `hZ`,`Slots`,`forsale`,`locked`,`password` FROM `houses`", true, "OnGameModeLoadHouses", "", "");
enum ZoneInfo
{
ID,
Float: minX,
Float: maxX,
Float: minY,
Float: maxY,
Color
}
new zInfo[MAX_ZONES][ZoneInfo];
public OnGameModeLoadZones() {
new rows,fields;
cache_get_data(rows, fields);
new Float: minXL,Float: maxXL,Float: minYL,Float: maxYL, colorL;
for( new i = 0; i != rows; i++) {
minXL = cache_get_field_content_float(i,"minX",dbhandle);
zInfo[i][minX] = minXL;
maxXL = cache_get_field_content_float(i,"maxX",dbhandle);
zInfo[i][maxX] = maxXL;
minYL = cache_get_field_content_float(i,"minY",dbhandle);
zInfo[i][minY] = minYL;
maxYL = cache_get_field_content_float(i,"maxY",dbhandle);
zInfo[i][maxY] = maxYL;
colorL = cache_get_field_content_int(i,"Color",dbhandle);
zInfo[i][Color] = colorL;
CreateZoneOnMap(i);
}
printf("Loaded %i zones",rows);
return 1;
}
stock CreateZoneOnMap(zoneID){
new gangzoneL;
gangzoneL = GangZoneCreate(zInfo[zoneID][minX],zInfo[zoneID][minY],zInfo[zoneID][maxX],zInfo[zoneID][maxY]);
GangZoneShowForAll(gangzoneL,zInfo[zoneID][Color]);
print("Zone created");
return 1;
}
Und oben halt noch das forward