Ittvan néhány kód amit a gamemode-ba kell beilleszteni,mert ha scriptbe teszem akkor nem mûködik tökéletesen :D
Szükséges include (progress): http://toribio.pastebin.com/TrJXUKtC
Mikor elõször spawnol a gyerek akkor elkezdi tölteni a gamet...igazábol csak díszítésnek jó,meg arra,hogy elolvassák,hogy mi a szerver lényege meg amit odaírsz szóval hasznos is.
Kép:
http://kephost.hu/image-7946_4CA8BF72.jpg
Mód elejére:
#include <progress>
//#define COLOR_WHITE 0xFFFFFFAA
#define TOLTES 10 //ide írd,hogy hány mp alatt töltõdjön be
#define RETURN return 1; }
Ezeket is valahova az elejére:
new Bar:loading;
new bool:betoltott[MAX_PLAYERS];
new Text:toltes;
new Text:jatek;
forward toltodikamap1(playerid);
forward toltodikamap2(playerid);
forward toltodikamap3(playerid);
forward toltodikamap4(playerid);
forward toltodikamap5(playerid);
forward toltodikamap6(playerid);
Ezeket valamelyik public fölé:
public toltodikamap1(playerid)
{
SetProgressBarValue(loading, 20);
UpdateProgressBar(loading, playerid);
RETURN
public toltodikamap2(playerid)
{
SetProgressBarValue(loading, 40);
UpdateProgressBar(loading, playerid);
RETURN
public toltodikamap3(playerid)
{
SetProgressBarValue(loading, 60);
UpdateProgressBar(loading, playerid);
RETURN
public toltodikamap4(playerid)
{
SetProgressBarValue(loading, 80);
UpdateProgressBar(loading, playerid);
RETURN
public toltodikamap5(playerid)
{
SetProgressBarValue(loading, 100);
UpdateProgressBar(loading, playerid);
RETURN
public toltodikamap6(playerid)
{
HideProgressBarForPlayer(playerid,loading);
SetPlayerVirtualWorld(playerid,0);
betoltott[playerid] = true;
SpawnPlayer(playerid);
SetCameraBehindPlayer(playerid);
TogglePlayerControllable(playerid,true);
TextDrawHideForPlayer(playerid,toltes);
TextDrawHideForPlayer(playerid,jatek);
RETURN
OnPlayerDisconnect alá:
betoltott[playerid] = false;
OnGameModeInit alá:
loading = CreateProgressBar(374.00, 366.00, 234.50, 14.19, 1687547306, 100.0);
toltes = TextDrawCreate(374,350,\"~r~Loading...\");
TextDrawFont(toltes,1);
TextDrawSetShadow(toltes,0);
jatek = TextDrawCreate(68,265,\"[HUN] Szerverem~n~~y~jatekmod lenyege: olj meg minel tobb embert~n~~y~es szerezz minel tobb pontot~n~~r~Segitsegert /help teleportok /tele~n~~g~Jo jatekot kivan az admin csapat!\");
TextDrawColor(jatek,0x33AA33AA);
TextDrawFont(jatek,1);
OnGameModeExit alá:
DestroyProgressBar(loading);
TextDrawDestroy(toltes);
TextDrawDestroy(jatek);
OnPlayerSpawn alá:
if(betoltott[playerid] == false){
new rand = random(3);
new cucc = TOLTES * 1000 - 8000;
new cucc2 = TOLTES * 1000 - 6000;
new cucc3 = TOLTES * 1000 - 4000;
new cucc4 = TOLTES * 1000 - 2000;
new cucc5 = TOLTES * 1000;
new cucc6 = TOLTES * 1000 + 500;
SetTimerEx(\"toltodikamap1\",cucc,0,\"i\",playerid);
SetTimerEx(\"toltodikamap2\",cucc2,0,\"i\",playerid);
SetTimerEx(\"toltodikamap3\",cucc3,0,\"i\",playerid);
SetTimerEx(\"toltodikamap4\",cucc4,0,\"i\",playerid);
SetTimerEx(\"toltodikamap5\",cucc5,0,\"i\",playerid);
SetTimerEx(\"toltodikamap6\",cucc6,0,\"i\",playerid);
SetPlayerVirtualWorld(playerid,55);
TogglePlayerControllable(playerid,false);
ShowProgressBarForPlayer(playerid,loading);
TextDrawShowForPlayer(playerid,toltes);
TextDrawShowForPlayer(playerid,jatek);
if(rand == 0){
SetPlayerCameraPos(playerid,141.9375,1927.7435,19.1933);
SetPlayerCameraLookAt(playerid,153.0080,1922.2366,18.8875);
SetPlayerPos(playerid,141.9375,1927.7435,26.1933);
}
if(rand == 1){
SetPlayerCameraPos(playerid,1475.7966,-1647.6646,15.1484);
SetPlayerCameraLookAt(playerid,1482.2134,-1640.1676,14.1484);
SetPlayerPos(playerid,1475.7966,-1647.6646,20.1484);
}
if(rand == 2){
SetPlayerCameraPos(playerid,-2741.7656,710.9208,42.1296);
SetPlayerCameraLookAt(playerid,-2732.6184,718.2512,41.2734);
SetPlayerPos(playerid,-2741.7656,710.9208,48.1296);
}
if(rand == 3){
SetPlayerCameraPos(playerid,696.6507,-1737.3748,14.2125);
SetPlayerCameraLookAt(playerid,705.6835,-1723.9795,8.6881);
SetPlayerPos(playerid,696.6507,-1737.3748,19.2125);
}
}
Az textdrawot írjátok át arra amire akarjátok én csak valamit beírtam.
Illetve a betöltésnél mutatott képeket is le cserélhetitek.
Meg még annyival turbózhatjátok,hogy a progress bar vagy a loading felirat villog nagyon jól néz ki :D
Ha scriptbe teszem azért nemjó mert, elindítja a töltést csak aztán a GM OnPlayerSpawn része miatt lespawnoltatja a játékost vhova máshova és homályos lesz a ház,ezért kell GM-be copyzni.
Ha valamit kifelejtettem szóljatok :D
Ezt sokkal egyszerûbben meg lehet oldani. Ez nem lesz elég gyors, és még pazarol is.
#include <a_samp>
#include <progress>
forward Load(playerid); //A Load funkció prototípusát létrehozzuk
forward Loaded(playerid); // Majd a Loaded funkcióét is.
forward UpdateBar(playerid); //Valamint a csík frissítõ funkciót
enum load_info //enumerátor létrehozása
{
Bar:LoadBar, //Enumerátoron belül a \"csíkunk\" változója
bool:Loading //Egy változó, ami segítségével figyelmünk alatt lehet hogy töltie a mapot, vagy nem
};
new PlayerInfo[MAX_PLAYERS][load_info]; //Mátrix létrehozása, a MAX_PLAYERS értékével, és az enumerátorunkkal
public Load(playerid)
{
PlayerPlaySound(playerid, 1056, 0.0, 0.0, 0.0); //csak a móka kedvéért, egy kis hang
PlayerInfo[playerid][LoadBar] = CreateProgressBar(10.00, 433.00, 620.50, 11.19, -83885825, 100.0); //Csík létrehozása
SetProgressBarColor(PlayerInfo[playerid][LoadBar], 0xFFFFFFFF); //Színezés (jelen esetben fehér)
SetProgressBarValue(PlayerInfo[playerid][LoadBar], 0.0); //Az értéket 0-ra állítjuk, tehát nem töltött még
SetTimerEx(\"UpdateBar\",50+random(500),0,\"i\",playerid); //Idõzítõ elindítása a töltéshez
PlayerInfo[playerid][Loading] = true; //És végül a változónkat igazra állítjuk, tehát most éppen \"tölti a mapot\"
return 1;
}
public UpdateBar(playerid)
{
SetProgressBarValue(PlayerInfo[playerid][LoadBar],GetProgressBarValue(PlayerInfo[playerid][LoadBar])+random(10)); //\"töltjük a csíkot\" véletlenszerû értékkel
UpdateProgressBar(PlayerInfo[playerid][LoadBar],playerid); //Frissítjük a csíkot
if(GetProgressBarValue(PlayerInfo[playerid][LoadBar]) >= 100) //Mikor 100, vagy nagyobb az értéke, jöhet a többi
{
Loaded(playerid); //azaz véget vetünk a töltésnek, mivel meghívjuk a befejezõ funkciót
return 1; //visszatérés, hogy az idõzítõ ne fusson le
}
return SetTimerEx(\"UpdateBar\",50+random(500),0,\"i\",playerid); //ha még nem érte el a végét a csík, akkor \"tovább forog a kör\"
}
public Loaded(playerid)
{
PlayerPlaySound(playerid, 1057, 0.0, 0.0, 0.0); //hang megint, csak úgy, nem fontos
DestroyProgressBar(PlayerInfo[playerid][LoadBar]); //Megsemmisítjük a csíkunkat
PlayerInfo[playerid][Loading] = false; //hamisra állítjuk az értékét a változónknak, tehát nem \"tölti a mapot\"
return 1;
}
Én így használom, nekem bevált :) Kicsit reálisan tölti, tehát véletlenszerûen növeli mindig. Vége meg akkor van, ha a csík értéke eléri a 100-at, vagy annál többet.
A \"Loading\" változónak itt most semmi jelentõsége nincs, azért hoztam létre, hát ha valaki használni fogja.