-
Hali! Egy olyan kérdésem lenne, hogy hogyan lehet eltüntetni az adott playert virtualworld , interior állítás nélkül, láttam már szervereken. Illetve ez miért rossz? Valamiért nem történik semmi ha lenyomom
if(newkeys == KEY_UP)
A másik problémám viszont ezzel lenne.
public OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
az objectid vlmiért teljesen más, beírtam a parancsnál h 978 és 1106-ot ad ki a fájlban.
-
Szerintem már megoldódott, de...
1. Nem tudok tökéletes megoldásról, az egyik, hogy SetPlayerPos máshova, a kamerát pedig helyben tartod,
illetve esetleg interiorba linkelsz egy járművet és berakod a playert, akkor azt hiszem a player sem látszik a járművel együtt.
2. KEY_UP-ot nem kérdezi le az KeyState-es public, a GetPlayerKeys() függvény használata lehetséges, például
OnPlayerUpdate(playerid) publicban, vagy egy timerben. Azzal le tudod kérni a fel-le, jobbra-balra tengelyeket is.
3. Ebből az alap public sorból semmi nem derül ki.
-
1. Azt majd megpróbálom, de szerintem menni fog. Amúgy fontos, hogy ott legyen a player, mert úgy tölt be az adott hely. (map,kocsik stb..)
2. Tökéletesen működik.
3.
public OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
{
if(response == EDIT_RESPONSE_FINAL)
{
new string[56];
getdate(ev,honap,nap);
gettime(ora,perc,masodperc);
format(string,sizeof(string),\"%d-%d-%d_%d:%d:%d\",ev,honap,nap,ora,perc,masodperc);
new objid = UjObjectID();
ObjectInfo[objid][ObjVan] = 1;
ObjectInfo[objid][ObjModel] = objectid;
ObjectInfo[objid][ObjPosX] = x;
ObjectInfo[objid][ObjPosY] = y;
ObjectInfo[objid][ObjPosZ] = z;
ObjectInfo[objid][ObjRotRX] = rx;
ObjectInfo[objid][ObjRotRY] = ry;
ObjectInfo[objid][ObjRotRZ] = rz;
ObjectInfo[objid][ObjDatum] = string;
ObjectInfo[objid][ObjKeszitette] = pname(playerid);
new file[32];
format(file,sizeof(file),\"/Objektek/%d.ini\",objid);
if(!fexist(file))
{
dini_Create(file);
dini_IntSet(file,\"ObjVan\",1);
dini_IntSet(file,\"ObjModel\",objectid);
dini_FloatSet(file,\"ObjPosX\",ObjectInfo[objid][ObjPosX]);
dini_FloatSet(file,\"ObjPosY\",ObjectInfo[objid][ObjPosY]);
dini_FloatSet(file,\"ObjPosZ\",ObjectInfo[objid][ObjPosZ]);
dini_FloatSet(file,\"ObjRotRX\",ObjectInfo[objid][ObjRotRX]);
dini_FloatSet(file,\"ObjRotRY\",ObjectInfo[objid][ObjRotRY]);
dini_FloatSet(file,\"ObjRotRZ\",ObjectInfo[objid][ObjRotRZ]);
dini_Set(file,\"ObjDatum\",ObjectInfo[objid][ObjDatum]);
dini_Set(file,\"ObjKeszitette\",pname(playerid));
}
}
}
-
Amikor létrehozod az objectet, akkor jó object jelenik meg?
Ebben a scriptben ketten sem találtunk hibát(persze elnézhettük, de nem bonyolult a szerkezete).
-
Amikor lerakom akkor jó, de mikor resizem akkor már nem (a fájlba rossz id-t ment le)
-
Gondolom Streamert használsz, már a callbackból ítélve. Ahhoz meg tartozik egy ilyen függvény
native EditDynamicObject(playerid, objectid);
és ne az alap objectekhez való EditObject()-et használd.
-
Ebben az esetben nem futna le a callback és nem mentené le.
Illetve szerkeszteni se lehetne a nem létező alap objectet. :D
-
Hát hidd el, hogy régebben olyat csináltam, hogy dinamikus pickupot raktam le, és a dolgokat, amiket akartam, hogy csináljon, azt a sima pickupos callback alá tettem, meghívódott, de mindig csak egyetlen egy. Úgyhogy el tudom képzelni, meg a címbe is azt írta be, úgyhogy.. :D
-
CMD:obj(playerid,params[])
{
if(IsPlayerConnected(playerid))
{
if(PlayerInfo[playerid][Admin] >= 4)
{
new parameter[64];
if(sscanf(params, \"s[64]{}\",parameter)) return SCM(playerid,WHITE,\"(( Használat: /obj(ect) [tipus] [id] ))\"), SCM(playerid,WHITE,\"(( Típusok: uj, torol ))\");
{
if(egyezik(parameter,\"uj\"))
{
new obj,Float:x,Float:y,Float:z;
GetPlayerPos(playerid,x,y,z);
if(sscanf(params,\"{s[64]}d\",obj)) return SCM(playerid,WHITE,\"(( Használat: /obj(ect) [uj] [objektid] ))\");
{
new objid = CreateDynamicObject(obj,x,y+5,z+1,0,0,0);
EditDynamicObject(playerid,objid);
}
}
else if(egyezik(parameter,\"torol\"))
{
new delid;
if(sscanf(params,\"{s[64]}d\",delid)) return SCM(playerid,WHITE,\"(( Használat: /obj(ect) [torol] [id] ))\");
{
new file[32];
format(file,sizeof(file),\"/Objektek/%d.ini\",delid);
if(fexist(file))
{
dini_Remove(file);
SFM(playerid,GREEN,\"(( Töröltél egy objektet! [%d] ))\",delid);
return 1;
}
if(!fexist(file))
{
SCM(playerid,ORANGE,\"(( Nincs ilyen objekt! ))\");
return 1;
}
}
}
}
}
}
return 1;
}
-
if(sscanf(params,\"{s[64]}d\",obj)) return SCM(playerid,WHITE,\"(( Használat: /obj(ect) [uj] [objektid] ))\");
if(sscanf(params,\"{s[64]}d\",delid)) return SCM(playerid,WHITE,\"(( Használat: /obj(ect) [torol] [id] ))\");
Lekérsz egy stringet és egy integert, de csak egy integer változót adsz meg neki.
-
Mármint akkor mit írtam el?
-
Remélem jól veszem ki, de mivel már megvan a parameter string, szerintem nyugodtan törölheted
az {s[64]} részt a sscanf sorából.
if(sscanf(params,\"d\",obj)) return SCM(playerid,WHITE,\"(( Használat: /obj(ect) [uj] [objektid] ))\");
if(sscanf(params,\"d\",delid)) return SCM(playerid,WHITE,\"(( Használat: /obj(ect) [torol] [id] ))\");
Javíts ki ha tévedek, de szerintem itt már semmilyen stringet nem akarsz lekérni.
*szerk*
-
így nem megy.
-
Mi a baj így? Csak mert szintaktikailag így helyes 1db integerrel.
-
hiába írok be objekt id-t nem megy. kiadja a Használat: stb...
-
Próbáld meg így:
CMD:obj(playerid,params[])
{
if(IsPlayerConnected(playerid))
{
if(PlayerInfo[playerid][Admin] >= 4)
{
new parameter[64],objektum;
if(sscanf(params, \"s[64]d\",parameter,objektum)) return SCM(playerid,WHITE,\"(( Használat: /obj(ect) [tipus] [id] ))\"), SCM(playerid,WHITE,\"(( Típusok: uj, torol ))\");
{
if(egyezik(parameter,\"uj\"))
{
new Float:x,Float:y,Float:z;
GetPlayerPos(playerid,x,y,z);
new objid = CreateDynamicObject(objektum,x,y+5,z+1,0,0,0);
EditDynamicObject(playerid,objid);
}
else if(egyezik(parameter,\"torol\"))
{
new file[32];
format(file,sizeof(file),\"/Objektek/%d.ini\",objektum);
if(fexist(file))
{
dini_Remove(file);
SFM(playerid,GREEN,\"(( Töröltél egy objektet! [%d] ))\",objektum);
return 1;
}
else
{
SCM(playerid,ORANGE,\"(( Nincs ilyen objekt! ))\");
return 1;
}
}
}
}
}
return 1;
}
-
így megy, de még mindig rossz ID-t ment el.
-
Publicot írd át erre(define is legyen benne):
#define GetDynamicObjectModel(%0) Streamer_GetIntData(STREAMER_TYPE_OBJECT, %0, E_STREAMER_MODEL_ID)
public OnPlayerEditDynamicObject(playerid, objectid, response, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz)
{
if(response == EDIT_RESPONSE_FINAL)
{
new string[56];
getdate(ev,honap,nap);
gettime(ora,perc,masodperc);
format(string,sizeof(string),\"%d-%d-%d_%d:%d:%d\",ev,honap,nap,ora,perc,masodperc);
new objid = UjObjectID();
ObjectInfo[objid][ObjVan] = 1;
ObjectInfo[objid][ObjModel] = GetDynamicObjectModel(objectid));
ObjectInfo[objid][ObjPosX] = x;
ObjectInfo[objid][ObjPosY] = y;
ObjectInfo[objid][ObjPosZ] = z;
ObjectInfo[objid][ObjRotRX] = rx;
ObjectInfo[objid][ObjRotRY] = ry;
ObjectInfo[objid][ObjRotRZ] = rz;
ObjectInfo[objid][ObjDatum] = string;
ObjectInfo[objid][ObjKeszitette] = pname(playerid);
new file[32];
format(file,sizeof(file),\"/Objektek/%d.ini\",objid);
if(!fexist(file))
{
dini_Create(file);
dini_IntSet(file,\"ObjVan\",1);
dini_IntSet(file,\"ObjModel\",GetDynamicObjectModel(objectid));
dini_FloatSet(file,\"ObjPosX\",ObjectInfo[objid][ObjPosX]);
dini_FloatSet(file,\"ObjPosY\",ObjectInfo[objid][ObjPosY]);
dini_FloatSet(file,\"ObjPosZ\",ObjectInfo[objid][ObjPosZ]);
dini_FloatSet(file,\"ObjRotRX\",ObjectInfo[objid][ObjRotRX]);
dini_FloatSet(file,\"ObjRotRY\",ObjectInfo[objid][ObjRotRY]);
dini_FloatSet(file,\"ObjRotRZ\",ObjectInfo[objid][ObjRotRZ]);
dini_Set(file,\"ObjDatum\",ObjectInfo[objid][ObjDatum]);
dini_Set(file,\"ObjKeszitette\",pname(playerid));
}
}
return 1;
}
Formázásért bocsi, egyszerűen nem eszi most meg...
-
Sikerült!! Köszi szépen!! :thumbsup: :thumbsup: 8)