-
Sziasztok! Nos leginkább az érdekelne, hogy meg lehetséges oldani, hogy egy adott játékos ha lerakott egy 3D textet majd a közelében van olyan 1 méter távolságba akkor lekérdezze melyik játékos ID ? Utána néztem kisebb kódnak de nem találtam semmi arra utaló dolgot amivel le lehetséges kérni a játékos ID -jét ha mondjuk elmegy a 3D text mellett. Láttam több olyan megoldást, hogy pickupot raknak le és egy 3D szöveget.. de nekem csak 3D szöveg lekérdezés kéne. Elõre köszönöm a segítséget.
[mod]Kiraktam a PREFIX-et.[/mod]
-
Hali, nem nehéz 8)
A bx, by, bz koordinátáknak a 3dtext koordinátáját adjad meg :thumbsup:
Nem kell new, ha a texednél már létre van hozva, ez csak példa amit írtam :yes:
new Float: bX, Float: bY, Float: bZ, id;
if(IsPlayerInRangeOfPoint(id, 1.0, bX, bY, bZ))
{
//Amit szeretnél, hogy mi történjen, ha 1méteren belül van.
}
és ha rám halgatsz, timert használsz onplayerupdate vagy ilyenek helyett.
-
Hülyeség a timer .. mert akkor mindig lekérdezi neki.. szóval más megoldás amivel lekérdezem egy callback alatt.
-
hát kos megoldása a jó.
onplayerupdate alatt tényleg ne használd, de hogy a timer alól is ki lehet-e bújni, azt nem tom.
lehet a tudásom nem elég ahoz, de én más megoldást a timer-en kívûl nem tudok.
ha jobban tetszik(bár semmi értelme, csak jobban mutat) akk a timer-ben, ha a játékos a sugárba lép, akk használj alatt CallLocalFunction-t, adhatsz neki 3dtext id-t is, amely alapján majd switch-es megoldással többféle 3dtext-et is tud majd kezelni.
Nem tom hülyeség vagy nem... :?
:whistle:
de én tuti így csinálnám, addig..... ameddig nem sikerül(egyik szokásom :) )
Üdv.
-
ZyZu, nem nagyon értem mit akarsz. A SA-MP belsõleg is azt teszi a PickUpoknál is, hogy egyfolytában csekkol minden letett pickupot, és, ha közelében vagy meghívja az eljárást. Pawnban sem tudod máshogy megoldani, és szerintem tökéletesen jó OnPlayerUpdate alá is. Akkor nem kell plusz rengeteg timert létrehozni, csak egyet használ, az is alapból meg van hívva. Így mûködik az OnPlayer(Key)StateChange is. Egyfolytában lekéri az álllapotodat, és, ha a kitétele teljesül (nem egyenlõ a (key)state az elõzõvel, akkor calllocalfunction. A streamer enumjához sajnos nem tudunk hozzáférni pawnból, a készítõ nem adott a 3dtextekhez ilyen funkciót, így ha nem akarod minden egyes létrehozás mellé a változót is létrehoznod, hookolnod kell. Az azt jelenti, hogy egy meglévõ funkciót undefiniálsz, majd lényegében visszadefiniálod egy másik stockra, ami már tartalmazza az általad beírt módosítást, pl. egy timer indítása. Basszameg, tényleg jobb lenne Timerrel :D
-
ZyZu, nem nagyon értem mit akarsz. A SA-MP belsõleg is azt teszi a PickUpoknál is, hogy egyfolytában csekkol minden letett pickupot, és, ha közelében vagy meghívja az eljárást. Pawnban sem tudod máshogy megoldani, és szerintem tökéletesen jó OnPlayerUpdate alá is. Akkor nem kell plusz rengeteg timert létrehozni, csak egyet használ, az is alapból meg van hívva. Így mûködik az OnPlayer(Key)StateChange is. Egyfolytában lekéri az álllapotodat, és, ha a kitétele teljesül (nem egyenlõ a (key)state az elõzõvel, akkor calllocalfunction. A streamer enumjához sajnos nem tudunk hozzáférni pawnból, a készítõ nem adott a 3dtextekhez ilyen funkciót, így ha nem akarod minden egyes létrehozás mellé a változót is létrehoznod, hookolnod kell. Az azt jelenti, hogy egy meglévõ funkciót undefiniálsz, majd lényegében visszadefiniálod egy másik stockra, ami már tartalmazza az általad beírt módosítást, pl. egy timer indítása. Basszameg, tényleg jobb lenne Timerrel :D
Nem érted.. ha én most létrehozok egy timert akkor mindig elõhívja a játékosnak ha közelében van.. de én úgy akarom, hogy ha közelében van akkor 1x hívja elõ mint a pickupnál és többet nem.. ha elmegy a pickuptól olyan 5 méterre akkor újra lehessen használni 1x -er a lekérdezését. Erre nem találok semmit.
-
Én egy bool változóval oldanám meg. Ha a körben benne van akkor igazra állítja és a timer elejére kell írni egy visszatérést, ha igaz a változó. Ha meg nincs benne a körben akkor pedig hamisra állítja. Ha pedig az a probléma, hogy mindig hamisra állítja akkor egy olyat, hogyha nincs benne a körben ÉS igaz a változó akkor állítsa át hamisra.
-
Timer nélkül nemhiszem hogy megoldható, úgyhogy megírtam neked!
#define FILTERSCRIPT
#include a_samp
public OnFilterScriptInit() {
SetTimer(\"OnPlayerUpdate2\", 500, true);
return 1;
}
//OnPlayerConnect: A PVarok értéke alapbol 0, ezért nem kell ez a sor ide, hogy: SetPVarInt(playerid, \"InZone\", 0);
forward OnPlayerUpdate2();
public OnPlayerUpdate2() {
for(new i; i < MAX_PLAYERS; i++) {
if(!IsPlayerConnected(i)) continue;
if(IsPlayerInRangeOfPoint(i, 2.0, 0.0, 0.0, 3.0) && !GetPVarInt(i, \"InZone\")) { // A 3DText koordinátái
SetPVarInt(i, \"InZone\", 1);
// IdeHogy mi történjen ha az adott zónában van a játékos(ok)
}else if(GetPVarInt(i, \"InZone\")) SetPVarInt(i, \"InZone\", 0);
}
return 1;
}
-
:facepalm:
Nem muszáj timert futtatni...
Csak ha igaz a dolog...
Boolos megoldás is jobb, de így célszerübb...
enum Erzekeles
{
sajt
}
new Benne[MAX_PLAYERS][Erzekeles];
new Float: bX, Float: bY, Float: bZ, id;
if(Benne[playerid][sajt] == 0)
{
if(IsPlayerInRangeOfPoint(id, 1.0, bX, bY, bZ))
{
//Amit szeretnél, hogy mi történjen, ha 1méteren belül van.
Benne[playerid][sajt] = 1;
SetTimerEx(\"Sajtindito\", 1000, false, \"i\", playerid);
}
}
forward Sajtindito(playerid)
public Sajtindito(playerid)
{
if(!IsPlayerInRangeOfPoint(id, 1.0, bX, bY, bZ))
Benne[playerid][sajt] = 0;
return 1;
}
így a timer addig fut ameddig kell :) ha nem mûködne szólj, csak össze dobtam indulás elött kicsit siettem...
lehet return 1; helyére return 0; kell mert az 1 visszatérés lenne, lehet azt 0án kéne berakni... Majd ha otthon leszek megnézem :)
-
kos, enumot használsz egy ilyen kis szösszenethez? Valamint célszerûbb? Hah...
Használj PVart.
A visszatérés jó.
-
Igen igazad van, ott a pont :) tényleg jobb lenne azt használni rá, nem pedig enumot :thumbsup:
De ha sok mindent akar úgy megoldani, mint ezt késõbb célszerübb lehet xd de mint montad erre elegendõ az is, jogos :)
-
Én csak PVart alkalmazok (meg pluginnal GVart), ezekért nem hozok létre külön változókat. :D
-
Megoldottam! ;) Köszönöm szépen srácok! :)
-
Sziasztok! Nos leginkább az érdekelne, hogy meg lehetséges oldani, hogy egy adott játékos ha lerakott egy 3D textet majd a közelében van olyan 1 méter távolságba akkor lekérdezze melyik játékos ID ? Utána néztem kisebb kódnak de nem találtam semmi arra utaló dolgot amivel le lehetséges kérni a játékos ID -jét ha mondjuk elmegy a 3D text mellett. Láttam több olyan megoldást, hogy pickupot raknak le és egy 3D szöveget.. de nekem csak 3D szöveg lekérdezés kéne. Elõre köszönöm a segítséget.
[mod]Kiraktam a PREFIX-et.[/mod]
-
Hali, nem nehéz 8)
A bx, by, bz koordinátáknak a 3dtext koordinátáját adjad meg :thumbsup:
Nem kell new, ha a texednél már létre van hozva, ez csak példa amit írtam :yes:
new Float: bX, Float: bY, Float: bZ, id;
if(IsPlayerInRangeOfPoint(id, 1.0, bX, bY, bZ))
{
//Amit szeretnél, hogy mi történjen, ha 1méteren belül van.
}
és ha rám halgatsz, timert használsz onplayerupdate vagy ilyenek helyett.
-
Hülyeség a timer .. mert akkor mindig lekérdezi neki.. szóval más megoldás amivel lekérdezem egy callback alatt.
-
hát kos megoldása a jó.
onplayerupdate alatt tényleg ne használd, de hogy a timer alól is ki lehet-e bújni, azt nem tom.
lehet a tudásom nem elég ahoz, de én más megoldást a timer-en kívûl nem tudok.
ha jobban tetszik(bár semmi értelme, csak jobban mutat) akk a timer-ben, ha a játékos a sugárba lép, akk használj alatt CallLocalFunction-t, adhatsz neki 3dtext id-t is, amely alapján majd switch-es megoldással többféle 3dtext-et is tud majd kezelni.
Nem tom hülyeség vagy nem... :?
:whistle:
de én tuti így csinálnám, addig..... ameddig nem sikerül(egyik szokásom :) )
Üdv.
-
ZyZu, nem nagyon értem mit akarsz. A SA-MP belsõleg is azt teszi a PickUpoknál is, hogy egyfolytában csekkol minden letett pickupot, és, ha közelében vagy meghívja az eljárást. Pawnban sem tudod máshogy megoldani, és szerintem tökéletesen jó OnPlayerUpdate alá is. Akkor nem kell plusz rengeteg timert létrehozni, csak egyet használ, az is alapból meg van hívva. Így mûködik az OnPlayer(Key)StateChange is. Egyfolytában lekéri az álllapotodat, és, ha a kitétele teljesül (nem egyenlõ a (key)state az elõzõvel, akkor calllocalfunction. A streamer enumjához sajnos nem tudunk hozzáférni pawnból, a készítõ nem adott a 3dtextekhez ilyen funkciót, így ha nem akarod minden egyes létrehozás mellé a változót is létrehoznod, hookolnod kell. Az azt jelenti, hogy egy meglévõ funkciót undefiniálsz, majd lényegében visszadefiniálod egy másik stockra, ami már tartalmazza az általad beírt módosítást, pl. egy timer indítása. Basszameg, tényleg jobb lenne Timerrel :D
-
ZyZu, nem nagyon értem mit akarsz. A SA-MP belsõleg is azt teszi a PickUpoknál is, hogy egyfolytában csekkol minden letett pickupot, és, ha közelében vagy meghívja az eljárást. Pawnban sem tudod máshogy megoldani, és szerintem tökéletesen jó OnPlayerUpdate alá is. Akkor nem kell plusz rengeteg timert létrehozni, csak egyet használ, az is alapból meg van hívva. Így mûködik az OnPlayer(Key)StateChange is. Egyfolytában lekéri az álllapotodat, és, ha a kitétele teljesül (nem egyenlõ a (key)state az elõzõvel, akkor calllocalfunction. A streamer enumjához sajnos nem tudunk hozzáférni pawnból, a készítõ nem adott a 3dtextekhez ilyen funkciót, így ha nem akarod minden egyes létrehozás mellé a változót is létrehoznod, hookolnod kell. Az azt jelenti, hogy egy meglévõ funkciót undefiniálsz, majd lényegében visszadefiniálod egy másik stockra, ami már tartalmazza az általad beírt módosítást, pl. egy timer indítása. Basszameg, tényleg jobb lenne Timerrel :D
Nem érted.. ha én most létrehozok egy timert akkor mindig elõhívja a játékosnak ha közelében van.. de én úgy akarom, hogy ha közelében van akkor 1x hívja elõ mint a pickupnál és többet nem.. ha elmegy a pickuptól olyan 5 méterre akkor újra lehessen használni 1x -er a lekérdezését. Erre nem találok semmit.
-
Én egy bool változóval oldanám meg. Ha a körben benne van akkor igazra állítja és a timer elejére kell írni egy visszatérést, ha igaz a változó. Ha meg nincs benne a körben akkor pedig hamisra állítja. Ha pedig az a probléma, hogy mindig hamisra állítja akkor egy olyat, hogyha nincs benne a körben ÉS igaz a változó akkor állítsa át hamisra.
-
Timer nélkül nemhiszem hogy megoldható, úgyhogy megírtam neked!
#define FILTERSCRIPT
#include a_samp
public OnFilterScriptInit() {
SetTimer(\"OnPlayerUpdate2\", 500, true);
return 1;
}
//OnPlayerConnect: A PVarok értéke alapbol 0, ezért nem kell ez a sor ide, hogy: SetPVarInt(playerid, \"InZone\", 0);
forward OnPlayerUpdate2();
public OnPlayerUpdate2() {
for(new i; i < MAX_PLAYERS; i++) {
if(!IsPlayerConnected(i)) continue;
if(IsPlayerInRangeOfPoint(i, 2.0, 0.0, 0.0, 3.0) && !GetPVarInt(i, \"InZone\")) { // A 3DText koordinátái
SetPVarInt(i, \"InZone\", 1);
// IdeHogy mi történjen ha az adott zónában van a játékos(ok)
}else if(GetPVarInt(i, \"InZone\")) SetPVarInt(i, \"InZone\", 0);
}
return 1;
}
-
:facepalm:
Nem muszáj timert futtatni...
Csak ha igaz a dolog...
Boolos megoldás is jobb, de így célszerübb...
enum Erzekeles
{
sajt
}
new Benne[MAX_PLAYERS][Erzekeles];
new Float: bX, Float: bY, Float: bZ, id;
if(Benne[playerid][sajt] == 0)
{
if(IsPlayerInRangeOfPoint(id, 1.0, bX, bY, bZ))
{
//Amit szeretnél, hogy mi történjen, ha 1méteren belül van.
Benne[playerid][sajt] = 1;
SetTimerEx(\"Sajtindito\", 1000, false, \"i\", playerid);
}
}
forward Sajtindito(playerid)
public Sajtindito(playerid)
{
if(!IsPlayerInRangeOfPoint(id, 1.0, bX, bY, bZ))
Benne[playerid][sajt] = 0;
return 1;
}
így a timer addig fut ameddig kell :) ha nem mûködne szólj, csak össze dobtam indulás elött kicsit siettem...
lehet return 1; helyére return 0; kell mert az 1 visszatérés lenne, lehet azt 0án kéne berakni... Majd ha otthon leszek megnézem :)
-
kos, enumot használsz egy ilyen kis szösszenethez? Valamint célszerûbb? Hah...
Használj PVart.
A visszatérés jó.
-
Igen igazad van, ott a pont :) tényleg jobb lenne azt használni rá, nem pedig enumot :thumbsup:
De ha sok mindent akar úgy megoldani, mint ezt késõbb célszerübb lehet xd de mint montad erre elegendõ az is, jogos :)
-
Én csak PVart alkalmazok (meg pluginnal GVart), ezekért nem hozok létre külön változókat. :D
-
Megoldottam! ;) Köszönöm szépen srácok! :)