Aus den Kleinen Scriptingfragen hierher verschoben.
Ich habe ein Gebäude, was man betreten kann. In diesem Gebäude kann man ein weiteres Gebäude(Interior) betreten.
Was ist hier der schlauste Weg? Ich setzte ja den PVar, dass der Spieler in einem Gebäude ist.
Muss ja so aussehen:
Spieler in Gebäude 1 ist Pvar InBuilding dementsprechend gesetzt, gehe ich von diesem Gebäude in ein anderes Zimmer als Beispiel muss das Pvar auch dementsprechend gesetzt werden, was hier glaube ich auch der Fall ist.
Gehe ich wieder zurück wird das Pvar auf -1 gesetzt, aber er ist ja noch im Gebäude.
C
enum buildungs{
Name[35],
Interior,
Welt,
Float:EX,Float:EY,Float:EZ,// Enter Position
Float:IX,Float:IY,Float:IZ// Exit Position
}
C
stock const Building[][buildungs]={
{"Ls Gebäude(1.Interior)",0,0,/*Eingang*X,X,X,/*Ausgang*/Y,Y,Y},
{"Ls Gebäude(2.weiteres Interior)",3,0,/*Eingang*/X,X,X,/*Ausgang*/Y,Y,Y}
};
C
if(GetPVarInt(playerid,"InBuilding")!=-1)
{
new e=GetPVarInt(playerid,"InBuilding");
if(IsPlayerInRangeOfPoint(playerid,3.0,Building[e][IX],Building[e][IY],Building[e][IZ]))
{
SetPlayerPos(playerid,Building[e][EX],Building[e][EY],Building[e][EZ]);
SetPlayerInterior(playerid,0);
SetPlayerVirtualWorld(playerid,0);
SetPVarInt(playerid,"InBuilding",-1);
return 1;
}
}
else
{
new Float:dist = 3.0, Float:tmp, e = -1;
for(new i; i<sizeof(Building); i++)
{
tmp = GetPlayerDistanceFromPoint(playerid, Building[i][EX],Building[i][EY],Building[i][EZ]);
if(tmp < dist)
{
dist = tmp;
e = i;
}
}
if(e != -1)
{
SetPlayerPos(playerid,Building[e][IX],Building[e][IY],Building[e][IZ]);
if(Building[e][Interior]!=0)SetPlayerInterior(playerid,Building[e][Interior]);
if(Building[e][Welt]!=0)SetPlayerVirtualWorld(playerid,Building[e][Welt]);
SetPVarInt(playerid,"InBuilding",e);
return 1;
}
}
Alles anzeigen