Ezt a scriptet azért készítettem, hogy véleményeket kapjak a scriptelésemrõl, vagyis hogy milyen szinten fejlõdtem.
Ez a script mutatja a jobb alsó sarokban textdraw-al, fehér színnel a pozíciódat (x, y, z, a). Infók: - Készítõ: Flash(Én)
- Elkészítési idõ: 10 perc (textdraw készítéssel együtt)
- Sorok száma: 54
- Parancsra eltávolítható és megjeleníthetõ: /poz
- Tesztelve: Mûködõ képes (nálam)!
A script:
// - [ Ez egy pozíció mutató script! Created By: Flash ] -
#include a_samp
#include zcmd
new
PlayerText:poz,
Float:p[4],
string[128]
;
public OnFilterScriptInit() { SetTimer(\"ShowPoz\", 800, true); return 1; }
public OnPlayerConnect(playerid) {
poz = CreatePlayerTextDraw(playerid, 635, 439, \"512.156561, 5125.25612, 28.512344, 0.0\");
PlayerTextDrawAlignment(playerid, poz, 3);
PlayerTextDrawBackgroundColor(playerid, poz, 255);
PlayerTextDrawFont(playerid, poz, 1);
PlayerTextDrawLetterSize(playerid, poz, 0.260000, 0.699999);
PlayerTextDrawColor(playerid, poz, -1);
PlayerTextDrawSetOutline(playerid, poz, 1);
PlayerTextDrawSetProportional(playerid, poz, 1);
PlayerTextDrawHide(playerid, poz);
SetPVarInt(playerid, \"PozShow\", 0);
return 1;
}
forward ShowPoz();
public ShowPoz() {
for(new i; i < MAX_PLAYERS; i++) {
if(!IsPlayerConnected(i) || !GetPVarInt(i, \"PozShow\")) continue;
GetPlayerPos(i, p[0], p[1], p[2]);
GetPlayerFacingAngle(i, p[3]);
format(string, sizeof(string), \"%f, %f, %f, %f\", p[0], p[1], p[2], p[3]);
PlayerTextDrawSetString(i, poz, string);
}
return 1;
}
CMD:poz(playerid) {
if(!GetPVarInt(playerid, \"PozShow\")) {
SetPVarInt(playerid, \"PozShow\", 1);
PlayerTextDrawShow(playerid, poz);
}else{
SetPVarInt(playerid, \"PozShow\", 0);
PlayerTextDrawHide(playerid, poz);
}
string[0] = EOS;
format(string, sizeof(string), \"Pozíciómérõ %skapcsolva!\",
(GetPVarInt(playerid, \"PozShow\") ? (\"be\") : (\"ki\"))
);
SendClientMessage(playerid, -1, string);
return 1;
}
Természetesen használhatjátok a saját szerveretekben.
Szia!
Jó lett :) Lehet hogy felhasználóm de lehet hogy nem ! Ment a + !
dázsííír.. mondjuk ilyet énis megcsinálok 10 perc alatt :D
A rendezés elég pofás, viszont észre vettem benne 1 szembetûnõ bakit, pazarlást.
OnFilterScriptInit callback-nél lefuttatsz egy ciklust, amelyben az összes id-nek lefuttatsz 1 ismétlõdõ timert, a ShowPoz callback-ra irányitva, ezzel nem is lenne gond, viszont a ShowPoz callbacknél lefuttatsz még1 ciklust ott is, a playereknek. És miért? Nem lenne egyszerûbb így?
[pawn] public ShowPoz(playerid) {[/pawn]
Remélem érted.
Még ezekkel a jobb megoldásokkal nem vagyok tisztába, szóval másold már be ahogy gondoltad.
[pawn]
forward ShowPoz(playerid);
public OnFilterScriptInit() { for(new i; i < MAX_PLAYERS; i++) SetTimerEx(\"ShowPoz\", 800, true, \"i\", i); return 1; }
public ShowPoz(playerid) {
if(!IsPlayerConnected(playerid) || !GetPVarInt(playerid, \"PozShow\")) continue;
GetPlayerPos(playerid, p[0], p[1], p[2]);
GetPlayerFacingAngle(playerid, p[3]);
format(string, sizeof(string), \"%f, %f, %f, %f\", p[0], p[1], p[2], p[3]);
PlayerTextDrawSetString(playerid, poz, string);
return 1;
}
[/pawn]
Nem kell annyi timer amennyi játékos van ha for ciklust használsz arra a célra hogy ellenõrizd ki OnLine játékos.
Tehát:
public OnFilterScriptInit() { SetTimer(\"ShowPoz\", 800, true); return 1; }
forward ShowPoz();
public ShowPoz() // A funkció ami 800 ms -ként meghívásra kerül.
{
for(new i; i < MAX_PLAYERS; i++) // A for ciklus mellyel ellenõrzöd ki online az IsPlayerConnected segítségével.
{
if(IsPlayerConnected(i) || GetPVarInt(i, \"PozShow\"))
{
// Mi történjen az online játékossal.
értem, kösz a felvilágosítást
E: Már ezt is tudom, de Zsoleszka tudom hogy mi pl az IsPlayerConnected stb.., mert ha nem tudnám valószínüleg bugosra írtam volna a scriptet, de azért köszi! :)
Persze értem én hogy érted, de mégis rosszul javítottad ki a fõposztban.
Jó lett majd lehet hogy, fel használom. :confused:
Not bad.