-
Sziasztok van ez a kód:
public OnPlayerPickUpPickup(playerid, pickupid)
{
new frissites[MAX_PLAYERS];
new data[500],string[128],pickid[10],hanyadik,foglalasiar[10],foglalva[10],Float:hotelpickx[10],Float:hotelpicky[10],Float:hotelpickz[10];
new pName[MAX_PLAYER_NAME];
new nincs[MAX_PLAYER_NAME] = \"nincs\";
new query[500];
GetPlayerName(playerid, pName, sizeof(pName));
mysql_query(\"SELECT `id`,`foglalasar`,foglalva,pickupx,pickupy,pickupz FROM hotel\");
mysql_store_result();
hanyadik=0;
while(mysql_fetch_row(data)) {
hanyadik++;
sscanf(data, \"p<|>dds[50]fff\",pickid[hanyadik],foglalasiar[hanyadik],foglalva[hanyadik],hotelpickx[hanyadik],hotelpicky[hanyadik],hotelpickz[hanyadik]);
if(IsPlayerInRangeOfPoint(playerid, 2.0,hotelpickx[hanyadik],hotelpicky[hanyadik],hotelpickz[hanyadik]))
{
if(pName[playerid] == foglalva[hanyadik] )
{
new foglalasido[128],resultline[100],naphosz[2];
format(query, sizeof(query), \"SELECT CONCAT(FLOOR(HOUR(TIMEDIFF(`foglalasido` + INTERVAL `naphosz` DAY, NOW())) / 24), \' nap \', MOD(HOUR(TIMEDIFF(`foglalasido`+ INTERVAL `naphosz` DAY,NOW())), 24), \' óra és \', MINUTE(TIMEDIFF(`foglalasido`+ INTERVAL `naphosz` DAY,NOW())), \' perc van vissza \'),naphosz FROM hotel WHERE id= \'%d\'\",pickid[hanyadik]);
mysql_query(query);
mysql_store_result();
mysql_fetch_row_format(resultline);
sscanf(resultline,\"p<|>s[50]d\",foglalasido,naphosz);
format(string,500,\"Ennyi idöd van vissza: %s Bérlés nap: %d\",foglalasido,naphosz);
ShowPlayerDialog(playerid,hotelszobalist, DIALOG_STYLE_LIST, string, \"Belépés\\nKijelentkezés a hotelból\\nHotelszoba itt tartózkodás meghosszabitás\", \"választ\", \"kilép\");
hazid[playerid] = pickid[hanyadik];
}
}
}
}
CreatePickup(1272, 1, x,y,z);
hogy lehetne azt ki küszöbölni hogy ahányszor frissít akkor a dialog ne alap helyzetre álljon?
Arra gondolok
1.
2.
3.
funkció és ahányszor frissít mindig 1. dob:(
timmer se ment:(
nem tudok rá megoldást:(
segítsetek:(
elõre is köszönöm:)
-
változók
new bool:Busy[MAX_PLAYERS],
pTimer[MAX_PLAYERS];
OnPlayerPickupDynamicPickUp(...) alá, rögtön az elsõ sorba
if(Busy[playerid]) return 1;
Busy[playerid] = true;
KillTimer(pTimer[playerid]);
pTimer[playerid] = SetTimerEx(\"UnBusy\", 4000, false, \"d\", playerid);
akárhova a scriptben, leginkább a végére
forward UnBusy(playerid);
public UnBusy(playerid) Busy[playerid] = false;
Remélem mûködik. :D
Magyarázat:
Ha a játékos beáll a pickupba, akkor a \'Busy\' változó értéke \'true\' lesz. Ha az OnPlayerPickupPickUp megint lefut, és a játékot Busy változója még mindig true, akkor 1es értékkel tér vissza, és nem csinál semmit, magyarul a Dialog ugyanúgy megmarad, nem hívódik elõ.
Ha eltelik 4 másodperc, miután beleállt, a Busy értéke automatikusan false lesz, és megint elõhívódik a Dialog.
Ezt a 4 másodpercet állíthatod, az idõzítõ idejének átírásával.
Ez kicsit \'bugos\' rendszer pickupnál, CheckPointnál teljesen hibátlanul mûködik.
Én az ilyen, hosszas dialogos cuccokat átírnám a helyedben CheckPointra, vagy DynamicArea-ra, mert úgy egyszerûbb leellenõrizni, hogy a játékos ott van-e
-
ha szépen meg kérlek irsz erre példát \"CheckPointra, vagy DynamicArea-ra\"?:)
ha igen akkor megköszönném .
utánna néztem egy picit megérné az pickupot erre cserélni :
CreateDynamicPickup??
miért lenne egyszerübb azonositani a hogy ott van e ??
de hajlok az egyszerûségre:)
-
CheckPointra találsz példát tutorialok között.
Streameres (Dynamic) cuccokat csak akkor használj, ha az általad használt pickupok száma meghaladja a SAMP limitjét.
-
lathatatlan cp hogy csinaljak?:) Hogyan ellenorizzem hogy ott a jatekos vagy nem ?:)
-
lathatatlan cp hogy csinaljak?:) Hogyan ellenorizzem hogy ott a jatekos vagy nem ?:)
láthatatlan CP?nem kell ide,csak IsPlayerInRangeOfPoint függvény,de
másik VW-be rakod le a pickupd..
AddStaticPickup(model, tipus,X,Y,Z,VWID);
-
meg mutatod mire gondolsz igy nem tudom megoldani:( ja es IsPlayerInRangeOfPoint elenoriztem nem a kodom
-
public OnFilterScriptInit()
{
new pickup = AddStaticPickup(1239,1,0.0,0.0,0.0,4);//0.0-k helyére a poziciót,4es helyére,a VW ID-t
return 1;
}
public OnPlayerPickUpPickup(playerid, pickupid)
{
if(pickupid == pickup)
{
SendClientMessage(playerid,-1,\"Belementél a pickup-ba!\");
}
return 1;
}
-
new busy[MAX_PLAYERS],
timer[MAX_PLAYERS];
public OnPlayerPickUpPickup(playerid, pickupid)
{
if(busy[playerid]) {
KillTimer(timer[playerid]);
timer[playerid] = SetTimerEx(\"unbusy\", 5000, false, \"d\", playerid);
return 1;
}
new data[500],string[128],pickid[10],hanyadik,foglalasiar[10],foglalva[10],Float:hotelpickx[10],Float:hotelpicky[10],Float:hotelpickz[10];
new pName[MAX_PLAYER_NAME];
new nincs[MAX_PLAYER_NAME] = \"nincs\";
new query[500];
GetPlayerName(playerid, pName, sizeof(pName));
mysql_query(\"SELECT `id`,`foglalasar`,foglalva,pickupx,pickupy,pickupz FROM hotel\");
mysql_store_result();
hanyadik=0;// 0 hozz add 1 et
while(mysql_fetch_row(data))
{
hanyadik++;
sscanf(data, \"p<|>dds[50]fff\",pickid[hanyadik],foglalasiar[hanyadik],foglalva[hanyadik],hotelpickx[hanyadik],hotelpicky[hanyadik],hotelpickz[hanyadik]);
if(IsPlayerInRangeOfPoint(playerid, 2.0,hotelpickx[hanyadik],hotelpicky[hanyadik],hotelpickz[hanyadik]))// ez változtassam
{
busy[playerid] = true;
if(foglalva[hanyadik] == nincs[playerid])
{
format(string,500,\"Szoba szám : %d \\n Foglalási ár: %d \\n Foglalva: %s\",pickid[hanyadik],foglalasiar[hanyadik],foglalva[hanyadik]);
ShowPlayerDialog (playerid,hotelszobafoglalas,DIALOG_STYLE_MSGBOX, \"Hotel foglalas\",string, \"foglalás\",\"kilép\");
lvhotelid[playerid] = pickid[hanyadik];
}
if(pName[playerid] == foglalva[hanyadik] )
{
new foglalasido[128],resultline[100],naphosz[2];
format(query, sizeof(query), \"SELECT CONCAT(FLOOR(HOUR(TIMEDIFF(`foglalasido` + INTERVAL `naphosz` DAY, NOW())) / 24), \' nap \', MOD(HOUR(TIMEDIFF(`foglalasido`+ INTERVAL `naphosz` DAY,NOW())), 24), \' óra és \', MINUTE(TIMEDIFF(`foglalasido`+ INTERVAL `naphosz` DAY,NOW())), \' perc van vissza \'),naphosz FROM hotel WHERE id= \'%d\'\",pickid[hanyadik]);
mysql_query(query);
mysql_store_result();
mysql_fetch_row_format(resultline);
sscanf(resultline,\"p<|>s[50]d\",foglalasido,naphosz);
format(string,500,\"Ennyi idöd van vissza: %s Bérlés nap: %d\",foglalasido,naphosz);
ShowPlayerDialog(playerid,hotelszobalist, DIALOG_STYLE_LIST, string, \"Belépés\\nKijelentkezés a hotelból\\nHotelszoba itt tartózkodás meghosszabitás\", \"választ\", \"kilép\");
lvhotelid[playerid] = pickid[hanyadik];
}
if(pName[playerid] != foglalva[hanyadik] && foglalva[hanyadik] != nincs[playerid])
{
format(string,500,\"Ez a hotel szoba foglalt %s részére!!\",foglalva[hanyadik]);
ShowPlayerDialog (playerid, foglaltszoba,DIALOG_STYLE_MSGBOX, \"Hotel már foglalt!!\",string, \"ok\",\"\");
}
}
}
}
forward unbusy(playerid);
public unbusy(playerid) {
KillTimer(timer[playerid];
busy[playerid] = false;
return 1;
}
megoldás TengeriMalac segítségével:)