[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
-
-
Steht ja direkt nicht drin Habs aber, danke.
Wieso wird das Objekt nicht langsam geöffnet sondern einfach sofort zur neuen Position gesetzt?
MoveDynamicObject(sanadoor2, 1253.35315, -1822.81628, 12.43170, 2.5, 0.00000, 0.00000, 90.00000); -
Hi, habe ein Befehl erstellt womit ich ein Spieler spectate, der funktioniert auch nur wenn ich aus dem Spec rausmöchte, per Tastendrück, funktioniert das nicht.
Der Befehl
CMD:sspec(playerid,params[]){ if(!CheckAdminName(playerid)) return 0; new pID, tmp[20], idx; tmp = strtok(params, idx); if(!strlen(tmp)) return SendClientMessage(playerid,0x6FFFFFFF,"ERROR:: /sspec [ID]"); if(IsNumeric(tmp)) pID = strval(tmp); else pID = ReturnPlayerID(tmp); if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,0x6FFFFFFF,"The Player is not online"); SetPlayerVirtualWorld(playerid, GetPlayerVirtualWorld(pID)); SetPlayerInterior(playerid, GetPlayerInterior(pID)); TogglePlayerSpectating(playerid, 1); PlayerSpectatePlayer(playerid, pID); return 1;}
OnPlayerKeyStateChance (wird keine der Funktionen aufgerufen)
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys){ if (PRESSED(KEY_ANALOG_RIGHT)) { if(!CheckAdminName(playerid)) return 0; TogglePlayerSpectating(playerid, 0); SetPlayerVirtualWorld(playerid, 0); SetPlayerInterior(playerid, 0); SendClientMessage(playerid,-1,"Taste gedrückt"); } return 1;}
hast du es mal Geprintet ob das Public überhaupt ausgeführt wurde ?
-
Habe das Problem behoben, hatte noch ein anderes FS wo ich in OnPlayerKeyStateChange einige Funktionen drin hatte
-
Beitrag von timm462f ()
Dieser Beitrag wurde von Trooper[Y] gelöscht (). -
ich habe ein Problem wieder werden mir 1000000 tausend angezeigt ? obwohl ich nur 2 habe ?
Code
Alles anzeigenocmd:atmgps(playerid) { //if(!IsPlayerConnected(playerid) || sInfo[playerid][eingeloggt] == 0) return SendClientMessage(playerid,ROT,"Du musst zuerst Eigeloggt sein!"); //if(sInfo[playerid][pJob] != 8) return SendClientMessage(playerid,ROT,"Du bist kein Geld Lieferant!"); //if(!geldl[playerid][geldl_Aktiv]) return SendClientMessage(playerid,ROT,"Du bist nicht Im Dienst!"); new zone[MAX_ZONE_NAME],string[125]; for(new i = 0; i <(atme); i++) { GetCord2DZone(atme[i][atm_x],atme[i][atm_y], zone, MAX_ZONE_NAME); format(string,sizeof(string),"ATM %d Standort: %s\n%s",i,zone,string); } ShowPlayerDialog(playerid,DIALOG_ATM_NAVI,DIALOG_STYLE_MSGBOX,"ATM Standorte",string,"Ok",""); return 1; }
// push kann mir jemand helfen?
-
Ich nehme an "atme" ist ein array:
Code
Alles anzeigenocmd:atmgps(playerid) { //if(!IsPlayerConnected(playerid) || sInfo[playerid][eingeloggt] == 0) return SendClientMessage(playerid,ROT,"Du musst zuerst Eigeloggt sein!"); //if(sInfo[playerid][pJob] != 8) return SendClientMessage(playerid,ROT,"Du bist kein Geld Lieferant!"); //if(!geldl[playerid][geldl_Aktiv]) return SendClientMessage(playerid,ROT,"Du bist nicht Im Dienst!"); new zone[MAX_ZONE_NAME],string[125]; for(new i = 0; i < sizeof(atme); i++) { GetCord2DZone(atme[i][atm_x],atme[i][atm_y], zone, MAX_ZONE_NAME); format(string,sizeof(string),"ATM %d Standort: %s\n%s",i,zone,string); } ShowPlayerDialog(playerid,DIALOG_ATM_NAVI,DIALOG_STYLE_MSGBOX,"ATM Standorte",string,"Ok",""); return 1; }
-
hey mein Problem ist das ich 1000 Arms angezeigt bekomme obwohl ich nur 2 habe ?
-
Vielleicht solltest du in der Schleife überprüfen ob der ATM überhaupt existiert.
-
Kann mir jemand bei meinem Haus system helfen? bzw Spawn..
Ich habe ein Haussys nach mrmonats tutorial. nun soll man ja auch am haus spawnen. so weit so gut, spawnt man in "seinem" interior, kommt man mit /exit an einem falschen haus raus. (nur wenn man dort spawnt, normal klappt es)hier mal der exit cmd:
ocmd:exit(playerid,params[]){ for(new i=0; i<sizeof(hInfo); i++) { if(GetPlayerVirtualWorld(playerid)!=i)continue; if(!IsPlayerInRangeOfPoint(playerid,2,hInfo[i][hi_x],hInfo[i][hi_y],hInfo[i][hi_z]))continue; SetPlayerPos(playerid, hInfo[i][h_x], hInfo[i][h_y], hInfo[i][h_z]); SetPlayerInterior(playerid, 0); SetPlayerVirtualWorld(playerid, 0); return 1; } return 1;}
Und hier wenn man sich eingeloggt hat
if(pInfo[playerid][pSpawn] == 1){ for(new i=0; i<sizeof(hInfo); i++) { new name[MAX_PLAYER_NAME]; GetPlayerName(playerid, name,sizeof(name)); if(!hInfo[i][h_id])continue; if(!strlen(hInfo[i][h_owner]))continue; if(!strcmp(hInfo[i][h_owner],name, true))continue; if(hInfo[i][hi_x] != 0.0) { //spawn in house //SetSpawnInfo( playerid, 0, pInfo[playerid][pSkin], hInfo[i][hi_x], hInfo[i][hi_y], hInfo[i][hi_z], 0.0,0,0,0,0,0,0 ); SetPlayerPos(playerid, hInfo[i][hi_x],hInfo[i][hi_y],hInfo[i][hi_z]); SetPlayerInterior(playerid, hInfo[i][h_interior]); SetPlayerVirtualWorld(playerid, i); SpawnPlayer(playerid); } else { // spawn infront of house SetSpawnInfo( playerid, 0, pInfo[playerid][pSkin], hInfo[i][h_x], hInfo[i][h_y], hInfo[i][h_z], 0.0,0,0,0,0,0,0 ); //SetPlayerPos(playerid, hInfo[i][h_x],hInfo[i][h_y],hInfo[i][h_z]); SetPlayerInterior(playerid, 0); SetPlayerVirtualWorld(playerid, 0); SpawnPlayer(playerid); } } //return 1; } } else { TogglePlayerControllable(playerid,0); OnTutorialEnter(playerid); return 1; } }
Habe leider weig bis kein verständnis für alle passagen die irgend was mit "i" oder "++" zu tun haben XD das tutvideo war nur zum abschreiben gut^^
Hat jemand eine Idee warum das hier schief läuft`?
-
-
Kann mir jemand bei meinem Haus system helfen? bzw Spawn..
Ich habe ein Haussys nach mrmonats tutorial. nun soll man ja auch am haus spawnen. so weit so gut, spawnt man in "seinem" interior, kommt man mit /exit an einem falschen haus raus. (nur wenn man dort spawnt, normal klappt es)hier mal der exit cmd:
ocmd:exit(playerid,params[]){ for(new i=0; i<sizeof(hInfo); i++) { if(GetPlayerVirtualWorld(playerid)!=i)continue; if(!IsPlayerInRangeOfPoint(playerid,2,hInfo[i][hi_x],hInfo[i][hi_y],hInfo[i][hi_z]))continue; SetPlayerPos(playerid, hInfo[i][h_x], hInfo[i][h_y], hInfo[i][h_z]); SetPlayerInterior(playerid, 0); SetPlayerVirtualWorld(playerid, 0); return 1; } return 1;}
Und hier wenn man sich eingeloggt hat
if(pInfo[playerid][pSpawn] == 1){ for(new i=0; i<sizeof(hInfo); i++) { new name[MAX_PLAYER_NAME]; GetPlayerName(playerid, name,sizeof(name)); if(!hInfo[i][h_id])continue; if(!strlen(hInfo[i][h_owner]))continue; if(!strcmp(hInfo[i][h_owner],name, true))continue; if(hInfo[i][hi_x] != 0.0) { //spawn in house //SetSpawnInfo( playerid, 0, pInfo[playerid][pSkin], hInfo[i][hi_x], hInfo[i][hi_y], hInfo[i][hi_z], 0.0,0,0,0,0,0,0 ); SetPlayerPos(playerid, hInfo[i][hi_x],hInfo[i][hi_y],hInfo[i][hi_z]); SetPlayerInterior(playerid, hInfo[i][h_interior]); SetPlayerVirtualWorld(playerid, i); SpawnPlayer(playerid); } else { // spawn infront of house SetSpawnInfo( playerid, 0, pInfo[playerid][pSkin], hInfo[i][h_x], hInfo[i][h_y], hInfo[i][h_z], 0.0,0,0,0,0,0,0 ); //SetPlayerPos(playerid, hInfo[i][h_x],hInfo[i][h_y],hInfo[i][h_z]); SetPlayerInterior(playerid, 0); SetPlayerVirtualWorld(playerid, 0); SpawnPlayer(playerid); } } //return 1; } } else { TogglePlayerControllable(playerid,0); OnTutorialEnter(playerid); return 1; } }
Habe leider weig bis kein verständnis für alle passagen die irgend was mit "i" oder "++" zu tun haben XD das tutvideo war nur zum abschreiben gut^^
Hat jemand eine Idee warum das hier schief läuft`?
Kannst du bitte den Code noch richtig einrücken? Sonst wird es schwer dir zu helfen. (Über BBCode einfügen)
Grüsse
TheBlueFireKing -
ocmd:setmoney(playerid, params[])
{
new pID, money, string[128], string2[128];
if(PlayerInfo[playerid][plogged] == false) return SendClientMessage(playerid, COLOR_LIGHTGREY, "[Warnung]: Du musst dich erst einloggen, um den Befehl zu benutzen!");
if(PlayerInfo[playerid][padmin] < 3) return SendClientMessage(playerid, COLOR_LIGHTGREY, "[Warnung]: Du bist nicht berechtigt diesen Befehl zu benutzen!");
if(PlayerInfo[playerid][pduty] == 0) return SendClientMessage(playerid, COLOR_LIGHTGREY, "[Warnung]: Du befindest dich nicht im Administrativen Dienst!");
if(sscanf(params, "ui", pID, money)) return SendClientMessage(playerid, COLOR_LIGHTGREY, "[Verwendung]: [/setmoney] [ID] [GELD]");
GivePlayerMoney(playerid, money);
format(string, sizeof(string), "{0099FF}[Admin]:{FFFFFF} %s %s hat dir %s$ gesettet.", GetAdminRank(playerid), PlayerInfo[playerid][pname], money);
SendClientMessage(pID, COLOR_WHITE, string);
format(string2, sizeof(string2), "{0099FF}[Admin]:{FFFFFF} Du hast dem Spieler %s %s$ gesettet.", PlayerInfo[pID][pname], money);
SendClientMessage(playerid, COLOR_WHITE, string2);
return 1;
}Ich bekomme die Meldung, dass ich ein Parameter vergessen hätte was aber nicht stimmt. Hoffe mir kann jemand weiterhelfen.
Mit freundlichen Grüßen
Grapefruit -
Zitat
ocmd:setmoney(playerid, params[])
{
new pID, money, string[128];
if(PlayerInfo[playerid][plogged] == false) return SendClientMessage(playerid, COLOR_LIGHTGREY, "[Warnung]: Du musst dich erst einloggen, um den Befehl zu benutzen!");
if(PlayerInfo[playerid][padmin] < 3) return SendClientMessage(playerid, COLOR_LIGHTGREY, "[Warnung]: Du bist nicht berechtigt diesen Befehl zu benutzen!");
if(PlayerInfo[playerid][pduty] == 0) return SendClientMessage(playerid, COLOR_LIGHTGREY, "[Warnung]: Du befindest dich nicht im Administrativen Dienst!");
if(sscanf(params, "ui", pID, money)) return SendClientMessage(playerid, COLOR_LIGHTGREY, "[Verwendung]: [/setmoney] [ID] [GELD]");
GivePlayerMoney(playerid, money);
format(string, sizeof(string), "{0099FF}[Admin]:{FFFFFF} %s %s hat dir %s$ gesettet.", GetAdminRank(playerid), PlayerInfo[playerid][pname], money);
SendClientMessage(pID, COLOR_WHITE, string);
format(string, sizeof(string), "{0099FF}[Admin]:{FFFFFF} Du hast dem Spieler %s %s$ gesettet.", PlayerInfo[pID][pname], money);
SendClientMessage(playerid, COLOR_WHITE, string);
return 1;
}Ich bekomme die Meldung, dass ich ein Parameter vergessen hätte was aber nicht stimmt. Hoffe mir kann jemand weiterhelfen.
Mit freundlichen Grüßen
GrapefruitZeig mal genau den Error
PS: Du musst nicht string und string2 machen -
Gerade kurz schmunzeln müssen
Erst einmal GivePlayerMoney(playerid, money) zu GivePlayerMoney(pID, money).
Dann muss ich ergänzen, dass GivePlayerMoney das Geld nicht neu setzt, d.h. der Spieler hat " x $ ", du gibst ihm deine Summe " y $ , sodass er " x + y $ " hat, du möchtest aber sicher, dass er eben nur " y $ " hat, also: ResetPlayerMoney(pID); GivePlayerMoney(pID, money);
Dann empfehle ich dir statt string & string2 zu verwenden einfach string2 zu string zu ändern. Dürfte zwar kein großen Ressourcenunterschied machen, aber theoretisch macht es einen. Strings kannst du 20x umformatieren und niemandem wird es auffallen, außer eben deinem Geldbeutel (wiegesagt, wieder auf's große Ganze ausgedrückt).Dann ist "money" ein Integer, d.h. ersetze die %s's in string & string2 mit %i.
Dann würde ich überprüfen, wie du pduty & plogged abspeicherst, sprich ob du eher mit "true & false" oder mit "1 % 0" arbeitest. -
Ups, garnicht gemerkt..
Also nochmal: Wenn man ein Haus hat und sich einloggt spawnt man in diesem. Wenn man dann /exit macht, ladet man am falschen haus. Also scheint beim einloggen das script nicht zu wissen wo man reingegangen ist. Wo ist der Fehler ??!
ocmd:exit(playerid,params[])
{
for(new i=0; i<sizeof(hInfo); i++)
{
if(GetPlayerVirtualWorld(playerid)!=i)continue;
if(!IsPlayerInRangeOfPoint(playerid,2,hInfo[i][hi_x],hInfo[i][hi_y],hInfo[i][hi_z]))continue;
SetPlayerPos(playerid, hInfo[i][h_x], hInfo[i][h_y], hInfo[i][h_z]);
SetPlayerInterior(playerid, 0);
SetPlayerVirtualWorld(playerid, 0);
return 1;
}
return 1;
}und bei OnPlayerlogin
if(pInfo[playerid][pSpawn] == 1) // BUG
{
for(new i=0; i<sizeof(hInfo); i++)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid, name,sizeof(name));
if(!hInfo[i][h_id])continue;
if(!strlen(hInfo[i][h_owner]))continue;
if(!strcmp(hInfo[i][h_owner],name, true))continue;
if(hInfo[i][hi_x] != 0.0)
{
//spawn in house
//SetSpawnInfo( playerid, 0, pInfo[playerid][pSkin], hInfo[i][hi_x], hInfo[i][hi_y], hInfo[i][hi_z], 0.0,0,0,0,0,0,0 );
SetPlayerPos(playerid, hInfo[i][hi_x],hInfo[i][hi_y],hInfo[i][hi_z]);
SetPlayerInterior(playerid, hInfo[i][h_interior]);
SetPlayerVirtualWorld(playerid, i);
SpawnPlayer(playerid);
}
else
{
// spawn infront of house
SetSpawnInfo( playerid, 0, pInfo[playerid][pSkin], hInfo[i][h_x], hInfo[i][h_y], hInfo[i][h_z], 0.0,0,0,0,0,0,0 );
//SetPlayerPos(playerid, hInfo[i][h_x],hInfo[i][h_y],hInfo[i][h_z]);
SetPlayerInterior(playerid, 0);
SetPlayerVirtualWorld(playerid, 0);
SpawnPlayer(playerid);
}
}
//return 1;
}
} -
Ups, garnicht gemerkt..
Also nochmal: Wenn man ein Haus hat und sich einloggt spawnt man in diesem. Wenn man dann /exit macht, ladet man am falschen haus. Also scheint beim einloggen das script nicht zu wissen wo man reingegangen ist. Wo ist der Fehler ??!
ocmd:exit(playerid,params[]){ for(new i=0; i<sizeof(hInfo); i++) { if(GetPlayerVirtualWorld(playerid)!=i)continue; if(!IsPlayerInRangeOfPoint(playerid,2,hInfo[i][hi_x],hInfo[i][hi_y],hInfo[i][hi_z]))continue; SetPlayerPos(playerid, hInfo[i][h_x], hInfo[i][h_y], hInfo[i][h_z]); SetPlayerInterior(playerid, 0); SetPlayerVirtualWorld(playerid, 0); return 1; } return 1;}
und bei OnPlayerlogin
if(pInfo[playerid][pSpawn] == 1) // BUG { for(new i=0; i<sizeof(hInfo); i++) { new name[MAX_PLAYER_NAME]; GetPlayerName(playerid, name,sizeof(name)); if(!hInfo[i][h_id])continue; if(!strlen(hInfo[i][h_owner]))continue; if(!strcmp(hInfo[i][h_owner],name, true))continue; if(hInfo[i][hi_x] != 0.0) { //spawn in house //SetSpawnInfo( playerid, 0, pInfo[playerid][pSkin], hInfo[i][hi_x], hInfo[i][hi_y], hInfo[i][hi_z], 0.0,0,0,0,0,0,0 ); SetPlayerPos(playerid, hInfo[i][hi_x],hInfo[i][hi_y],hInfo[i][hi_z]); SetPlayerInterior(playerid, hInfo[i][h_interior]); SetPlayerVirtualWorld(playerid, i); SpawnPlayer(playerid); } else { // spawn infront of house SetSpawnInfo( playerid, 0, pInfo[playerid][pSkin], hInfo[i][h_x], hInfo[i][h_y], hInfo[i][h_z], 0.0,0,0,0,0,0,0 ); //SetPlayerPos(playerid, hInfo[i][h_x],hInfo[i][h_y],hInfo[i][h_z]); SetPlayerInterior(playerid, 0); SetPlayerVirtualWorld(playerid, 0); SpawnPlayer(playerid); } } //return 1; } }
Debugge mal beim Ausloggen und Einloggen die Koordinaten, Virtualworld ect. von dem Haus.
Da du nach dem Einloggen im Falschen Haus landest kann der Fehler beim Speichern auch passieren. -
Also ich hab in der zwischenzeit das mal geändert. Da ich das gefühl hatte Inofrmatonen gehen verloren, hab eich einfach beim player noch die hausid gespeichert (die ist auch gleichzeit virtuelle welt)
Dann muss ich jetzt nochmal ein altes Backup anschauen um das zu überprüfen. Soweit ich noch rausgefunden hatte spawnt man aber nicht willkürlich, sondern am ersten haus der liste(aller häuser)
Naja, jetzt sieht es eh anders aus.
Nach dem Umschreiben habe ich das Prob, dass er nicht auslesen will. mysql macht n fehlercode : field not found ("hi_y")was hab ich da verdödelt?! Ich habs aus dem part an dem alle häuser geladen werden kopiert. aber irgendwie kann ers nicht auslesen.
if(pInfo[playerid][pSpawn] == 1) //
{
new pHouseIDquery[128];
format(pHouseIDquery, sizeof(pHouseIDquery), "SELECT * FROM houses");
mysql_function_query(dbhandle, pHouseIDquery, true, "",""); /// ????new num_fields,num_rows;
cache_get_data(num_rows,num_fields,dbhandle);
//if(!num_rows)return 1;
for(new i=0; i<num_rows; i++)
{
new phid=pInfo[playerid][pHouseID];
hInfo[phid][h_x]=cache_get_field_content_float(i, "h_x", dbhandle);
hInfo[phid][h_y]=cache_get_field_content_float(i, "h_y", dbhandle);
hInfo[phid][h_z]=cache_get_field_content_float(i, "h_z", dbhandle);
hInfo[phid][hi_x]=cache_get_field_content_float(i, "hi_x", dbhandle);
hInfo[phid][hi_y]=cache_get_field_content_float(i, "hi_y", dbhandle);
hInfo[phid][hi_z]=cache_get_field_content_float(i, "hi_z", dbhandle);
if(hInfo[i][hi_x] != 0.0)
{
//spawn in house
//SetSpawnInfo( playerid, 0, pInfo[playerid][pSkin], hInfo[i][hi_x], hInfo[i][hi_y], hInfo[i][hi_z], 0.0,0,0,0,0,0,0 );
SetPlayerPos(playerid, hInfo[phid][hi_x],hInfo[phid][hi_y],hInfo[phid][hi_z]);
SetPlayerInterior(playerid, hInfo[phid][h_interior]);
SetPlayerVirtualWorld(playerid, pInfo[playerid][pHouseID]);
SpawnPlayer(playerid);
}
else
{
// spawn infront of house
SetSpawnInfo( playerid, 0, pInfo[playerid][pSkin], hInfo[phid][h_x], hInfo[phid][h_y], hInfo[phid][h_z], 0.0,0,0,0,0,0,0 );
//SetPlayerPos(playerid, hInfo[i][h_x],hInfo[i][h_y],hInfo[i][h_z]);
SetPlayerInterior(playerid, 0);
SetPlayerVirtualWorld(playerid, 0);
SpawnPlayer(playerid);
}
return 1;
}Man spawnt, allerdings beim nullpunkt der karte..
-
Er hat in der Datenbank die Spalte hi_y nicht gefunden schau in der Datenbank ob es die Zeile gibt
-
Also ich hab in der zwischenzeit das mal geändert. Da ich das gefühl hatte Inofrmatonen gehen verloren, hab eich einfach beim player noch die hausid gespeichert (die ist auch gleichzeit virtuelle welt)
Dann muss ich jetzt nochmal ein altes Backup anschauen um das zu überprüfen. Soweit ich noch rausgefunden hatte spawnt man aber nicht willkürlich, sondern am ersten haus der liste(aller häuser)
Naja, jetzt sieht es eh anders aus.
Nach dem Umschreiben habe ich das Prob, dass er nicht auslesen will. mysql macht n fehlercode : field not found ("hi_y")was hab ich da verdödelt?! Ich habs aus dem part an dem alle häuser geladen werden kopiert. aber irgendwie kann ers nicht auslesen.
if(pInfo[playerid][pSpawn] == 1) // { new pHouseIDquery[128]; format(pHouseIDquery, sizeof(pHouseIDquery), "SELECT * FROM houses"); mysql_function_query(dbhandle, pHouseIDquery, true, "",""); /// ???? new num_fields,num_rows; cache_get_data(num_rows,num_fields,dbhandle); //if(!num_rows)return 1; for(new i=0; i<num_rows; i++) { new phid=pInfo[playerid][pHouseID]; hInfo[phid][h_x]=cache_get_field_content_float(i, "h_x", dbhandle); hInfo[phid][h_y]=cache_get_field_content_float(i, "h_y", dbhandle); hInfo[phid][h_z]=cache_get_field_content_float(i, "h_z", dbhandle); hInfo[phid][hi_x]=cache_get_field_content_float(i, "hi_x", dbhandle); hInfo[phid][hi_y]=cache_get_field_content_float(i, "hi_y", dbhandle); hInfo[phid][hi_z]=cache_get_field_content_float(i, "hi_z", dbhandle); if(hInfo[i][hi_x] != 0.0) { //spawn in house //SetSpawnInfo( playerid, 0, pInfo[playerid][pSkin], hInfo[i][hi_x], hInfo[i][hi_y], hInfo[i][hi_z], 0.0,0,0,0,0,0,0 ); SetPlayerPos(playerid, hInfo[phid][hi_x],hInfo[phid][hi_y],hInfo[phid][hi_z]); SetPlayerInterior(playerid, hInfo[phid][h_interior]); SetPlayerVirtualWorld(playerid, pInfo[playerid][pHouseID]); SpawnPlayer(playerid); } else { // spawn infront of house SetSpawnInfo( playerid, 0, pInfo[playerid][pSkin], hInfo[phid][h_x], hInfo[phid][h_y], hInfo[phid][h_z], 0.0,0,0,0,0,0,0 ); //SetPlayerPos(playerid, hInfo[i][h_x],hInfo[i][h_y],hInfo[i][h_z]); SetPlayerInterior(playerid, 0); SetPlayerVirtualWorld(playerid, 0); SpawnPlayer(playerid); } return 1; }
Man spawnt, allerdings beim nullpunkt der karte..
So wie ich das sehe gehst du bei jedem Spawn durch alle Häuser durch und setzt deren Koordinaten. Das ist nicht der Sinn der Sache denke ich. Mach es lieber so:
Bei OnGameModeInit 1x alle Häuser aus der Datenbank ins Script "laden".
Code
Alles anzeigennew pHouseIDquery[128]; format(pHouseIDquery, sizeof(pHouseIDquery), "SELECT * FROM houses"); mysql_function_query(dbhandle, pHouseIDquery, true, "",""); /// ???? new num_fields,num_rows; cache_get_data(num_rows,num_fields,dbhandle); if(!num_rows)return 1; for(new i=0; i<num_rows; i++) { hInfo[i][h_x]=cache_get_field_content_float(i, "h_x", dbhandle); hInfo[i][h_y]=cache_get_field_content_float(i, "h_y", dbhandle); hInfo[i][h_z]=cache_get_field_content_float(i, "h_z", dbhandle); hInfo[i][hi_x]=cache_get_field_content_float(i, "hi_x", dbhandle); hInfo[i][hi_y]=cache_get_field_content_float(i, "hi_y", dbhandle); hInfo[i][hi_z]=cache_get_field_content_float(i, "hi_z", dbhandle); }
Danach beim Spawn:Code
Alles anzeigenif(pInfo[playerid][pSpawn] == 1) // { if(hInfo[pInfo[playerid][pHouseID]][hi_x] != 0.0) { //spawn in house //SetSpawnInfo( playerid, 0, pInfo[playerid][pSkin], hInfo[pInfo[playerid][pHouseID]][hi_x], hInfo[pInfo[playerid][pHouseID]][hi_y], hInfo[pInfo[playerid][pHouseID]][hi_z], 0.0,0,0,0,0,0,0 ); SetPlayerPos(playerid, hInfo[pInfo[playerid][pHouseID]][hi_x],hInfo[pInfo[playerid][pHouseID]][hi_y],hInfo[pInfo[playerid][pHouseID]][hi_z]); SetPlayerInterior(playerid, hInfo[pInfo[playerid][pHouseID]][h_interior]); SetPlayerVirtualWorld(playerid, pInfo[playerid][pHouseID]); SpawnPlayer(playerid); } else { // spawn infront of house SetSpawnInfo( playerid, 0, pInfo[playerid][pSkin], hInfo[pInfo[playerid][pHouseID]][h_x], hInfo[pInfo[playerid][pHouseID]][h_y], hInfo[pInfo[playerid][pHouseID]][h_z], 0.0,0,0,0,0,0,0 ); //SetPlayerPos(playerid, hInfo[pInfo[playerid][pHouseID]][h_x],hInfo[pInfo[playerid][pHouseID]][h_y],hInfo[pInfo[playerid][pHouseID]][h_z]); SetPlayerInterior(playerid, 0); SetPlayerVirtualWorld(playerid, 0); SpawnPlayer(playerid); } return 1; }
-
@ reaL das wird an anderer stelle benutzt um die Häuser icons zu platzieren, da funktioniert es. also ist es vorhanden, evtl sucht er aber beim spawnen nicht an der richtigen stelle i nder datenbank..
Ja ich hab das doppelt. Das hatte ich ja gemacht weil man immer am falschen haus gespawnt ist. wenn ich das jetzt rauswerfe ist das speichern der House id bei Player info doch unnötig oder?
Denn so wie es war hat ja enter und exit imer funktioniert, nur beim aus und wieder einloggen buggte es. aber beim aus oder einloggen wirds nichts gespeichert. die häuser speichern nur beim server beenden.
Da ich nicht verstehe wie das mit dem ganzen [ i ] gedönz funktionert dachte ich mir, ich bau das so dass beim login (also nur be mersten spawn) die hausliste abgefragt wird. Also ich habe extra die hausid zusätzlich im player gespeichert (nur wenn haus kauft oder verkauft). Da ic hweiss dass der player beim login geladen ist ich dort die hausid abfragen kann. nun wollte ich das "verknüpfen" mit meinen häusern. also in meinem mysql gibt es "players" und "houses" ich wollte jetzt dass bei houses nach der ID gesucht wird, die ich extra beim player gespeichert habe.
Da hab ich aber einfach im script was kopiert und zusammen geschustert. ich hab halt keine ahnungIst es performane mässig sehr nachteilig beim login die häuser abzufragen? Ich will ungern das häuser laden im gamemodeinit verpfuschen. deswegen woltle ich einfach nur den mysql lese fehler ausmerzen:
[16:39:29] [WARNING] CMySQLResult::GetRowDataByName - field not found ("hi_x")
[16:39:29] [WARNING] CMySQLResult::GetRowDataByName - field not found ("hi_y")
[16:39:29] [WARNING] CMySQLResult::GetRowDataByName - field not found ("hi_z") -