Peršokti į turinį
  • ŽAIDIMAI
  • , ŽAIDIMAI
  • ŽAIDIMAI

Negalima prašyti ar platinti betkokių žaidimą (multiplayer) palengvinančių programų ir scriptų! Kitaip bus taikoma 1.21. taisyklė

Scriptai( Ne default'inės funkcijos )


hustrine

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 1741 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Recommended Posts

Tikrai? O man atrodo, kad čia lengviausias būdas serverio crash'ui.

Tai tau atrodo blogai. Naudojant netinkamą transporto priemonės modelį funkcijos CreateVehicle/AddStaticVehicle/AddStaticVehicleEx gražins INVALID_VEHICLE_ID, tačiau serveris necrashins.

 

Ištrauka iš wiki: 

 

 

  • INVALID_VEHICLE_ID (65535) if vehicle was not created (vehicle limit reached or invalid vehicle model ID passed).

 

 

O dabar grįžkim prie temos prasmės.

Nuoroda į komentarą
Dalintis per kitą puslapį

  • Parašė po 2 savaičių...

MAX_PLAYERS

 

Principas panašus kaip tų, kurie jau buvo visur minimi, išbindinam default MAX_PLAYER ir sukuriam naują, bet šis variantas turi privalumą, kad pakeitus server.cfg faile maxplayers eilutę, nereikės nieko daryti kode.

 

#undef MAX_PLAYERS
#define MAX_PLAYERS GetServerVarAsInt("maxplayers")

 

o tuomet sugalvoji kurti naują kintamajį

 

new Zmoniu_IQ[MAX_PLAYERS];

 

ir svarstai kodėl meta klaidą. 

Nuoroda į komentarą
Dalintis per kitą puslapį

  • Parašė po 2 mėnesių...

GetDateAsTimestamp (GMT +2)


Aprašymas:
Funkcija konvertuoja datą į timestamp'ą. Funkcija yra mktime funkcijos analogas.

Kodas:
stock GetDateAsTimestamp(yy, mm, dd, hh, mins, secs) // GMT +2 (Vilnius)
{
     new timestamp, metu_skirtumas = yy - 1970, c, menesio_dienos[12];
     timestamp = (metu_skirtumas * 31536000) + ((dd-1) * 86400) + ((hh-3) * 3600) + (mins * 60) + secs;
     if(mm > 1)
     {
          menesio_dienos = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
          for(c = 0; c < mm-1; c++)
          {
               timestamp += (menesio_dienos[c] * 86400);
          }
     }
     for(c = 0; c < metu_skirtumas; c++)
     {
          if((((1970 + c + 1) % 4 == 0) && ((1970 + c + 1) % 100 != 0)) || ((1970 + c + 1) % 400 == 0)) timestamp += 86400;
     }
     return timestamp;
}
Struktūra:
GetDateAsTimestamp(yy, mm, dd, hh, mins, secs)
yy - metai.
mm - mėnuo.
dd - diena.
hh - valanda.
mins - minutė.
sec - sekundė.

Naudojimas:
printf("2014/10/14 19:26:55 Timestamp: %d", GetDateAsTimestamp(2014, 10, 14, 19, 26, 55)); // gražins 1413304015

Autorius: Aš (ES.^ a.k.a Johurt).

Nuoroda į komentarą
Dalintis per kitą puslapį

[FNC] CoordsInWater & ObjectInWater

Aprašymas:
Funkcijos skirtos patikrinti ar žaidėjas / transporto priemonė / objektas / koordinatės randasi vandeni ar ne.
CoordsInWater(Float:x, Float:y, Float:z)
Parametrai:
Float:x - X koordinatė.
Float:y - Y koordinatė.
Float:z - Z koordinatė.
ObjectInWater(type, objectid)
Parametrai:
type - objekto tipas (1 - žaidėjas, 2 - transporto priemonė, 3 - objektas, 4 - objektas sukurtas Incognito streamer'io pagalba).
objectid - objekto ID.

Funkcijos gražina:
0/false - koordinates/objektas ne vandeni.
1/true - koordinates/objektas vandeni.

Kodas:
Pastebin

* Zonų koordinatės ištrauktos iš „data/water.dat“ failo (ačiū Blantas už patarimą). Dvi paskutinės zonos sukurtos mano (vietoj 6 kuriuos buvo faile).
* Zonos su pavadinimu „not used“ nenaudojamos.

Autorius: Aš (ES.^ a.k.a Johurt).

Nuoroda į komentarą
Dalintis per kitą puslapį

  • Parašė po 4 savaičių...

IsVehicleInRangeOfPoint


Aprašymas:
Funkcija skirta patikrinti ar transporto priemonė randasi nurodytame spindulyje (tas pats kaip IsPlayerInRangeOfPoint tik su transporto priemone).

Kodas:
#define IsVehicleInRangeOfPoint(%0,%1,%2,%3,%4) %1 >= GetVehicleDistanceFromPoint(%0,%2,%3,%4) ? true : false
Naudojimas:
IsVehicleInRangeOfPoint(vehicleid, Float:range, Float:x, Float:y, Float:z);
Parametrai:
vehicleid - transporto priemonės ID.
Float:range - spindulys.
Float:x - X koordinatė.
Float:y - Y koordinatė.
Float:z - Z koordinatė.

Funkcija gražina:
false/0 - transporto priemonė nėra nurodytame spindulyje.
true/1 - transporto priemonė yra nurodytame spindulyje.

Autorius: Aš (ES.^ a.k.a johurt).

Redaguota , nario ES.^
Nuoroda į komentarą
Dalintis per kitą puslapį

  • Parašė po 1 mėnesio...

FixTire


Aprašymas:
Funkcija skirta sutvarkyti vieną transporto priemonės padangą.

Kodas:
Pastebin

Naudojimas:
FixTire(vehicleid, tireid, bool:isbike = false);
Parametrai:
vehicleid - transporto priemonės ID.
tireid - padangos ID (1-2/1-4).
bool:isbike - false - 4 ratai, true - 2 ratai.


Autorius: Aš (ES.^ a.k.a Johurt).

Redaguota , nario ES.^
Nuoroda į komentarą
Dalintis per kitą puslapį

  • Parašė po 4 savaičių...


stock Comma(numbers)

{

    new temp[24],counter = -1;

    valstr(temp,numbers);

    for(new i = strlen(temp);i > 0; i--)

    {

        counter++;

        if(counter == 3)

        {

            strins(temp,".",i);

            counter = 0;

        }

    }

    return temp;

}

Nuoroda į komentarą
Dalintis per kitą puslapį

  • Parašė po 3 mėnesių...

SetPlayerMoney

 

Trumpas aprašymas:

Šios funkcijos dėka, jūs galėsite nustatyti žaidėjo pinigų skaičių.

 

Kodas:

stock SetPlayerMoney(playerid, pinigai)
{
   ResetPlayerMoney(playerid);
   return GivePlayerMoney(playerid, pinigai);
}

Naudojimas:

CMD:pinigai(playerid)
{
   SetPlayerMoney(playerid, 100000);
   return 1;
}

Autorius: HJones.

Nuoroda į komentarą
Dalintis per kitą puslapį

  • Parašė po 1 mėnesio...

Datos ir laiko išgavimas paprastesniu būdu.

stock GetTimeAndDate()
{
	new Year, Month, Day, Hour, Minute, String[20];

	getdate(Year, Month, Day);
	gettime(Hour, Minute);

	format(String, sizeof(String), "%d-%02d-%02d %02d:%02d", Year, Month, Day, Hour, Minute);

	return String;
}

Naudojimas:

printf("Dabar yra: %s", GetTimeAndDate());

Funkcija pati išgaus kada reikia, o kada nereikia rašyti "0" prie laiko/datos. Pavyzdžiui nerašys 2015-5-31, rašys taip: 2015-05-31.

Redaguota , nario Rocky'
Nuoroda į komentarą
Dalintis per kitą puslapį

GivePlayerScore

 

Trumpas aprašymas:

Su šia funkcija galėsite žadėjui pridėti patirties.

 

Kodas:

stock GivePlayerScore(playerid, kiekis)
{
    SetPlayerScore(playerid, GetPlayerScore(playerid), +kiekis);
    return 1;
}

Naudojimas: 

CMD:duotixp(playerid, params[])
{
    new id, xp;
    if(sscanf(params, "ui", id, xp)) return SendClientMessage(playerid, -1, "Naudojimas: /duotixp [Vardas_Pavardė/ID] [Kiekis]");
    if(!IsPlayerConnected(id)) return SendClientMessage(playerid, -1, "Žaidėjas neprisijungęs");
    GivePlayerScore(id, xp);
    return 1;
}

Autorius: HJones.

Redaguota , nario HJones
Nuoroda į komentarą
Dalintis per kitą puslapį

 

GivePlayerScore

 

Trumpas aprašymas:

Su šia funkcija galėsite žadėjui pridėti patirties.

 

Kodas:

stock GivePlayerScore(playerid, kiekis)
{
    SetPlayerScore(playerid, GetPlayerScore(playerid), +kiekis);
    return 1;
}

Naudojimas: 

CMD:duotixp(playerid, params[])
{
    new id, xp;
    if(sscanf(params, "ui", id, xp)) return SendClientMessage(playerid, -1, "Naudojimas: /duotixp [Vardas_Pavardė/ID] [Kiekis]");
    if(!IsPlayerConnected(id)) return SendClientMessage(playerid, -1, "Žaidėjas neprisijungęs");
    GivePlayerScore(id, xp);
    return 1;
}

Autorius: HJones.

 

#define GivePlayerScore(%0,%1) SetPlayerScore(%0,GetPlayerScore(%0)+%1);
Redaguota , nario Rocky'
Nuoroda į komentarą
Dalintis per kitą puslapį

  • Parašė po 1 mėnesio...

Next


Aprašymas:
Funkcija skirta išgauti sekančio žaidėjo ID pagal nurodyto žaidėjo ID. Funkcijos naudojimo spektras labai didelis. Vienas iš naudojimo variantų - žaidėjų stebėjimo sistemoje, stebimo žaidėjo keitimas su mygtukais (pats naudoju). Funkcija per ciklą perrenka prisijungusius žaidėjus į abi puses (nuo mažiausio (nurodyto) iki didžiausio ir nuo didžiausio (nurodyto) iki mažiausio žaidėjo ID). Šiandien perrašinėdamas MAX_PLAYERS ciklus sumasčiau pasidalinti šia funkcija su jumis.

Kodas:
Pastebin

Naudojimas:
Next(receiver, playerid, bool:right);
Parametrai:
receiver - žaidėjas, kuri funkcija ignoruoją (žaidėjų stebėjimo sistemoje tai administratorius prižiūrintis žaidėją).
playerid - žaidėjo ID, nuo kurio funkcija pradeda ir baigia (jeigu daugiau prisijungusių žaidėjų nėra arba jie atkrentą dėl tam tikrų sąlygų) tikrinimą.
bool:right - false - ciklas veikia mažėjančia tvarka, true - ciklas veikia didėjančia tvarka.

Funkcija gražina:
INVALID_PLAYER_ID - jeigų daugiau žaidėjų nėra arba jų ID gražinti dėl sąlygos negalima.
0 - MAX_PLAYERS - sekančio žaidėjo ID.

Autorius: Aš (ES.^ a.k.a Johurt).

Redaguota , nario ES.^
Nuoroda į komentarą
Dalintis per kitą puslapį

Kažkam ten reikėjo funkcijos, kad sukonvertuotų UNIX reikšmę į realią datą. Tuo pačiu priklijuoju dar keletą funkcijų. 

Funkcijos:

GetWeekDay () // išgauna dabartinę savaitės dienos pavadinimą; 
IsLeapYear (year) // grąžina 1, jei metai "year" bus keliamieji, arba 0, jeigu ne.
TimestampToDate (timestamp) // sukonvertuoja UNIX reikšmę "ti mestamp" į realią datą
TimestampToDateEx (timestamp, compare = 0) // grąžina reikšmę, kiek laiko liko iki UNIX reikšmės "timestamp". Naudojant parametrą "compare" galima sulyginti dvi UNIX timestamp reikšmes.

 
TimestampToDate - ne mano, tik pertvarkiau truputį. Yra keleta minusų: nepritaikyta kai kurioms zonoms (pvz Australijoje GMT vietomis gali būti +9.5, +10.5 ir t.t) ir nepalaiko neigiamų reikšmių. Originalas - ?

TimestampToDateEx - ne mano taip pat, aš išimiau nereikalingus matematinių f-jų naudojimus ir truputį pagreitinau patį f-jos veikimą. Originalas čia

FUNKCIJŲ NAUDOJIMAS - APAČIOJE. 
 

#define IsLeapYear(%0)             ((%0 % 4 == 0) && (%0 % 100 != 0)) || (%0 % 400 == 0)

stock TimestampToDate (timestamp)
{
    new
        daysOfMonth [12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
        currentYear = 1970,
        currentDay, currentMonth, currentHour, currentMinute, currentSecond,
        currentDate [20 + 1]
    ;        

    while (timestamp > 31622400)
    {
        timestamp -= 31536000;

        if (IsLeapYear (currentYear))
            timestamp -= 86400;

        currentYear ++;
    }

   if (IsLeapYear (currentYear))
        daysOfMonth[1] = 29;    

    while (timestamp > 86400)
    {
        timestamp -= 86400;
        currentDay ++;

        if (currentDay == daysOfMonth [currentMonth])
        {
            currentMonth ++;
            currentDay = 0;
        }
    }

    while (timestamp > 60)
    {
        timestamp -= 60;
        currentMinute ++;

        if (currentMinute == 60)
           {
               currentMinute = 0;
               currentHour ++;
           }
    }

    currentSecond = timestamp;

    format (currentDate, 20, "%d/%02d/%02d %02d:%02d:%02d", currentYear, currentMonth + 1, currentDay + 1, currentHour + 3, currentMinute, currentSecond);
    return (currentDate);
}

stock TimestampToDateEx (timestamp, compare = 0) // Autorius: Blacklite
{
    if (!compare)
        compare = gettime();

    new
        Float: Seconds = (timestamp > compare) ? (timestamp - compare) : (compare - timestamp),
        Result [15 + 1],
        Amount
    ;

    if (Seconds < 60)
    {
        Result = "mažiau nei min.";
        return (Result);
    }

    else if (Seconds < 3600)
    {
        Amount = floatround (Seconds / 60, floatround_floor);
        Result = "min.";
    }

    else if (Seconds < 86400)
    {
        Amount = floatround (Seconds / 3600, floatround_floor);
        Result = "val.";
    }

    else if (Seconds < 2592000)
    {
        Amount = floatround (Seconds / 86400, floatround_floor);
        Result = "d.";
    }

    else if (Seconds < 31536000)
    {
        Amount = floatround (Seconds / 2592000, floatround_floor);
        Result = "mėn.";
    }

    else
    {
        Amount = floatround (Seconds / 31536000, floatround_floor);
        Result = "m.";
    }

    format (Result, 32, "%d %s", (Amount > 1) ? (Amount) : (1), Result);
    return (Result);
}

stock GetWeekDay ()
{
    new dayName [14 + 1];

    switch (((gettime ()+ 356400) / 86400 - (gettime() + 356400) / 86400 / 7 * 7))
    {
        case 1: dayName = "pirmadienis";
        case 2: dayName = "antradienis";
        case 3: dayName = "trečiadienis";
        case 4: dayName = "ketvirtadienis";
        case 5: dayName = "penktadienis";
        case 6: dayName = "šeštadienis";
        default: dayName = "sekmadienis";
    }

    return (dayName);
}

Naudojimas:
 

public OnGameModeInit ()
{
    printf ("Ar 2016 metai bus keliamieji? %s", (IsLeapYear (2016)) ? ("taip") : ("ne"));
    printf ("Ar 2017 metai bus keliamieji? %s", (IsLeapYear (2017)) ? ("taip") : ("ne"));
    printf ("%s", TimestampToDate (gettime() + 31536000));
    printf ("%s", GetWeekDay ());

    // Ar 2016 metai bus keliamieji? taip
    // Ar 2017 metai bus keliamieji? ne
    // 2016/07/08 18:15:28
    // ketvirtadienis

    new
        vipTime = gettime () + 86400 * 30; // 30 d.

    vipTime -= 86400 * (1 + random (9)); // patestinimui atimam nuo 1 iki 10 d.

    printf ("Liko VIP laiko: %s", TimestampToDateEx (vipTime));

    // Liko VIP laiko: 26d. (random, gali keistis)
}
Redaguota , nario b3nz
Nuoroda į komentarą
Dalintis per kitą puslapį

  • Parašė po 3 savaičių...

Radau kompe numestą AFK tikrintoją, tai prieš ištrintnt nusprendžiau pasidalint. :D

 

Funkcijos:

 

IsPlayerPaused (playerid) - patikrina, ar žaidėjas yra AFK (nejuda daugiau kaip pusė min. (jei rašo į chatą, naudoja komandas, praėjus pusė min. kaip AFK nefiksuoja) arba yra sustabdęs žaidimą (ESC/ALT+TAB) daugiau kaip 5s.)

 

Callbackai: (pvz. apačioje)

 

OnPlayerPause (playerid, bool: notmoving = false) - iškviečiamas, kai žaidėjas nejuda daugiau kaip pusė min. arba sustabdo žaidimą (ESC/ALT+TAB) daugiau kaip 5s.
OnPlayerResume (playerid, bool: notmoving = false) - iškviečiamas, kai žaidėjęs nejudėjęs daugiau kaip pusė min. ir nenaudojęs komandų/nerašęs į chatą pajuda, arba sugrįžta į žaidimą po pauzės (ESC/ALT+TAB)

 

#include <a_samp>

#define IsPlayerPaused(%0) (isPlayerPaused {%0} || isPlayerPausedEx {%0})

new
    bool: isPlayerPausedEx [MAX_PLAYERS char],
    bool: isPlayerPaused   [MAX_PLAYERS char],

    Float: lastPos [MAX_PLAYERS][3],

    afkPointsEx [MAX_PLAYERS char],
    afkPoints   [MAX_PLAYERS char],

    afkTime [MAX_PLAYERS]
;

public OnGameModeInit ()
    return SetTimer ("afkCheck", 1000, true);

public OnPlayerConnect (playerid)
{
    isPlayerPausedEx {playerid} = false;
    isPlayerPaused   {playerid} = false;

    lastPos [playerid][0] = 0.0;
    lastPos [playerid][1] = 0.0;
    lastPos [playerid][2] = 0.0;

    afkPointsEx {playerid} = 0;
    afkPoints   {playerid} = 0;

    afkTime [playerid] = 0;

    return (true);
}

public OnPlayerUpdate (playerid)
{
    if (isPlayerPaused {playerid})
    {
        isPlayerPaused {playerid} = false;
        OnPlayerResume (playerid, false);
    }

    afkPoints {playerid} = 0;

    return (true);
}

public OnPlayerText (playerid, text[])
{
    afkPointsEx {playerid} = 0;

    return (true);
}

public OnPlayerCommandText (playerid, cmdtext [])
{
    afkPointsEx {playerid} = 0;

    return (true);
}

forward afkCheck ();
public  afkCheck ()
{
    for (new i, j = GetPlayerPoolSize (); i <= j; i++)
    {
        if (IsPlayerSpawned (i))
        {
            if (IsPlayerInRangeOfPoint (i, 2.0, lastPos [i][0], lastPos [i][1], lastPos [i][2]))
            {
                afkPointsEx {i} ++;

                if (afkPointsEx {i} >= 30 && !IsPlayerPaused (i))
                {
                    if (afkTime [i] > gettime ())
                        continue;

                    isPlayerPausedEx {i} = true;
                    OnPlayerPause (i, true);

                    return (true);
                }
            }

            else
            {
                GetPlayerPos (i, lastPos [i][0], lastPos [i][1], lastPos [i][2]);
                afkPointsEx {i} = 0;

                if (isPlayerPausedEx {i})
                {
                    isPlayerPausedEx {i} = false;
                    OnPlayerResume (i, true);
                }
            }

            afkPoints {i} ++;

            if (afkPoints {i} >= 5 && !IsPlayerPaused (i))
            {
                isPlayerPaused {i} = true;
                OnPlayerPause (i, false);
            }            
        }
    }

    return (true);
}

forward OnPlayerPause (playerid, bool: notmoving);
public  OnPlayerPause (playerid, bool: notmoving)
{
    if (notmoving)
        SendClientMessage (playerid, -1, "AFK dėl nejudėjimo.");
    else
        SendClientMessage (playerid, -1, "AFK dėl žaidimo pauzės.");
    
    afkTime [playerid] = gettime ();
}

forward OnPlayerResume (playerid, bool: notmoving);
public  OnPlayerResume (playerid, bool: notmoving)
{
    new
        afkMessage [34];

    format (afkMessage, 34, "Jūs išbuvote AFK %d sekundes.", gettime () - afkTime [playerid]);
    SendClientMessage (playerid, -1, afkMessage);

    afkTime [playerid] = gettime () + 2;
}

stock IsPlayerSpawned (playerid)
{
    switch (GetPlayerState (playerid))
    {
        case 0, 7, 9:
            return (false);
    }

    return (true);
}
Nuoroda į komentarą
Dalintis per kitą puslapį

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 1741 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Prisijungti prie diskusijos

Palikti atsakymą galite iš karto, o užsiregistruoti vėliau. Jeigu jau turite paskyrą mūsų forume, Prisijunkite.

Svečias
Atsakyti šioje temoje...

×   Įklijuotas tekstas turi teksto formatavimą.   Pašalinti teksto formatavimą

  Galimi tik 75 veidukai.

×   Nuoroda buvo automatiškai įterpta.   Įterpti nuorodą paprastai

×   Jūsų ankstesnis pranešimas buvo atkurtas.   Išvalyti redaktorių

×   Jūs negalite įkelti nuotraukas tiesiogiai.Įkelkite arba įdėkite nuotraukas iš URL.

  • Šiame puslapyje naršo:   0 nariai

    • Nėra registruotų narių peržiūrinčių šį forumą.

Skelbimai



×
×
  • Sukurti naują...