Zaključano

[Savjet] Početak skriptanja

Započeo xSpirit
pre 13 godina
2,507
pregleda
12
postova
Ova tema je zaključana. Samo moderatori i administratori mogu odgovarati.
Psiholog
Shot Caller
pre 13 godina
Evo ovo je moj prvi tut, ne budite oÅ¡tri 😄

Znači svi smo mi bili jednom prvi puta na SAMPu i htjeli otvoriti svoj server, ali kada ste skinuli onaj "samp server" sa sa-mp stranice niste znali ništa. Uglavnom sada ću ovim drugim početnicima to probati što jednostavnije objasniti. Samo da vam na početku napomenem, ukoliko ne znate engleski, nemojte se niti truditi učiti skriptati...


Znači trebate skinuti sa official sa-mp stranice SA-MP 0.3e Windows Server. Kada extractate tu datoteku, dobiti ćete neke mape te još neke stvari. Otvorite server.cfg sa notepadom i dobiti ćete podatke koje morate promjeniti da biste naštimali svoj server:

echo Executing Server Config...
lanmode 0
rcon_password changeme
maxplayers 32
port 7777
hostname SA-MP 0.3 Server
gamemode0 grandlarc 1
filterscripts baseaf gl_actions gl_property gl_realtime gl_mapicon ls_elevator
announce 0
query 1
weburl www.sa-mp.com
onfoot_rate 40
incar_rate 40
weapon_rate 40
stream_distance 300.0
stream_rate 1000
maxnpc 0


Za početak promjenite Rcon_password u željenu rcon lozinku (više kasnije), hostname u željeno ime servera te gamemode u ime gamemoda kojeg ćete koristiti. To bi trebalo ispasti ovako:

echo Executing Server Config...
lanmode 0
rcon_password balkansamp
maxplayers 32
port 7777
hostname Moj Server
gamemode0 MyServer
filterscripts baseaf gl_actions gl_property gl_realtime gl_mapicon ls_elevator
announce 0
query 1
weburl www.sa-mp.com
onfoot_rate 40
incar_rate 40
weapon_rate 40
stream_distance 300.0
stream_rate 1000
maxnpc 0


Ostale stvari će te skužiti sami kasnije. Dakle idemo dalje... Otiđite u pawno folder te na aplikaciju pawno kliknite desnim klikom te run as administrator. Kliknite ctrl + n te će vam se otvoriti nova skripta. Izgledati će ovako:
// This is a comment
// uncomment the line below if you want to write a filterscript
//#define FILTERSCRIPT

#include

#if defined FILTERSCRIPT

public OnFilterScriptInit()
{
    print("\n--------------------------------------");
    print(" Blank Filterscript by your name here");
    print("--------------------------------------\n");
    return 1;
}

public OnFilterScriptExit()
{
    return 1;
}

#else

main()
{
    print("\n----------------------------------");
    print(" Blank Gamemode by your name here");
    print("----------------------------------\n");
}

#endif

public OnGameModeInit()
{
    // Don't use these lines if it's a filterscript
    SetGameModeText("Blank Script");
    AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
    return 1;
}

public OnGameModeExit()
{
    return 1;
}

public OnPlayerRequestClass(playerid, classid)
{
    SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
    return 1;
}

public OnPlayerConnect(playerid)
{
    return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    return 1;
}

public OnPlayerSpawn(playerid)
{
    return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
    return 1;
}

public OnVehicleSpawn(vehicleid)
{
    return 1;
}

public OnVehicleDeath(vehicleid, killerid)
{
    return 1;
}

public OnPlayerText(playerid, text[])
{
    return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
    if (strcmp("/mycommand", cmdtext, true, 10) == 0)
    {
        // Do something here
        return 1;
    }
    return 0;
}

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
    return 1;
}

public OnPlayerExitVehicle(playerid, vehicleid)
{
    return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
    return 1;
}

public OnPlayerEnterCheckpoint(playerid)
{
    return 1;
}

public OnPlayerLeaveCheckpoint(playerid)
{
    return 1;
}

public OnPlayerEnterRaceCheckpoint(playerid)
{
    return 1;
}

public OnPlayerLeaveRaceCheckpoint(playerid)
{
    return 1;
}

public OnRconCommand(cmd[])
{
    return 1;
}

public OnPlayerRequestSpawn(playerid)
{
    return 1;
}

public OnObjectMoved(objectid)
{
    return 1;
}

public OnPlayerObjectMoved(playerid, objectid)
{
    return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
    return 1;
}

public OnVehicleMod(playerid, vehicleid, componentid)
{
    return 1;
}

public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
{
    return 1;
}

public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
    return 1;
}

public OnPlayerSelectedMenuRow(playerid, row)
{
    return 1;
}

public OnPlayerExitedMenu(playerid)
{
    return 1;
}

public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
    return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    return 1;
}

public OnRconLoginAttempt(ip[], password[], success)
{
    return 1;
}

public OnPlayerUpdate(playerid)
{
    return 1;
}

public OnPlayerStreamIn(playerid, forplayerid)
{
    return 1;
}

public OnPlayerStreamOut(playerid, forplayerid)
{
    return 1;
}

public OnVehicleStreamIn(vehicleid, forplayerid)
{
    return 1;
}

public OnVehicleStreamOut(vehicleid, forplayerid)
{
    return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    return 1;


Upišite F5 i odaberite ime gamemoda koje ste predhodno upisali. Klikom na F5 compilate mod u .amx file koji vam je potreban za pokretanje servera (ne treba uopće .pwn file kao što mnogi misle da je potreban). Sada možete pokrenuti kućni server klikom na samp-server. Otvoriti će vam se neki crni prozor te će pisati u njemu nešto. Njega nemojte gasiti te otiđite u svoj samp client te u port stavite :7777 (točno tako) i možete ući u svoj server (naravno neće imati komandi nikakvih ali ćete ih lako kasnije dodati)...

Prve 3 linije možete obrisati i staviti nešto svoje. Sve što se nalazi iza // je komentar te on ne utječe na skriptu. Također možete staviti tekst između /* i */ što je korisno kada trebate recimo samo na neko vrijeme ukloniti neku mapu iz moda ali predugo traje da na svaki red upisujete //.
Umjesto ta 3 reda stavite npr ovo:

/*--------------------------------------------------------------------------------
---------------------------------Moj prvi gamemod--------------------------
--------------------------------Verzija: v.0.1---------------------------------
--------------------Skripter i maper: xSpirit--------------------------------
---------------------------------------------------------------------------------*/


Sada namjestite spawn. U kodu nađite ovo:

public OnGameModeInit()
{
    // Don't use these lines if it's a filterscript
    SetGameModeText("Blank Script");
    AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
    return 1;
}


Ovaj SetGameModeText je mod servera kojeg možete vidjeti na sa-mp clientu.
AddPlayerClass daje serveru spawn informacije tj. više o njemu možete vidjeti ovdje.

Idemo dalje...
Mnogi početnici grješe u korištenju strcmpa za komande te ga koriste umjesto jednostavnijeg ZCMD-a, ali evo u strcmpu ću raditi sada... Prvu komandu koju napravite je /help i samim time zadate sebi neke komande koje trebate dalje raditi.
U gamemodu nađite "public OnPlayerCommandText" te ćete dobiti ovo:
public OnPlayerCommandText(playerid, cmdtext[])
{
    if (strcmp("/mycommand", cmdtext, true, 10) == 0)
    {
        // Do something here
        return 1;
    }
    return 0;
}


Umjesto /mycommand stavite ime svoje komande, u ovom slučaju /help. Izbrišite ovaj ispod dio te stavite ovako (ispod objašnjenje svega):
    if (strcmp("/help", cmdtext, true, 5) == 0)
    {
SendClientMessage(playerid,0xFFFFFF,"|-------------KOMANDE NA SERVERU------------------|");
SendClientMessage(playerid,0xFFFFFF,"/admins, /gamemasters, /attempt, /me, /do, /s, /c");
SendClientMessage(playerid,0xFFFFFF,"/w, /new, /report, /animations, /levelup");
SendClientMessage(playerid,0xFFFFFF,"|---------------------------------------------------|");
        }
    return 1;
}


Znači SendClientMessage znači da ovome igraču koji je upisao /help šalje poruku. Playerid označava kojem igraču šaljete poruku (playerid označava onoga koji je upisao komandu), a ovo 0xFFFFFF označava boju. Boje su iste kao i HTML boje samo što umjesto # stavljate 0x.

Sada znate osnove skriptanja, ono najosnovnije. Sada preporučam da uzmete jedan gamemod i pregledate njegove funkcije, komande itd. Možda vam na početku neće biti jasno ali pregledajte malo bolje, upoznajte se sa "kompjuterskom logikom" itd. Kada mislite da ste naučili nešto (nakon 2 tjedna do mjesec dana), probajte napraviti svoju dm skriptu. Za početak ništa osobito, reg/log sistem u dialogu, osnovne komande, admin i vip sistem. Malo vježbajte na tom DM modu te kada ga završite (ako ste zaljubljenik u RP) možete prjeći na RP skripte. Napravite slično kao i sa DM skriptom, samo u RP stilu sve radite. Mnogi u početku skriptanja grješe, traže tutoriale na netu, ali samo prekopiraju i ništa ne pročitaju. Barem pročitajte a ako želite baš razumjeti ono što čitate preporučam da pregledate samp wiki stranicu: http://wiki.sa-mp.com/wiki/Main_Page . Tu ćete naću razne callbackove, funkcije, pa čak i neke tutoriale, koji će vam vjerovatno više objasniti nego ovi drugi sa interneta. Ukoliko vam dođe 10ak errora kod compilanja, nemojte odustati... pogledajte na internetu dalje kako su drugi rješavali takve stvari i rješiti će te. Ukoliko ste baš zabrljali, onda izbrišiti ono šta ste zadnje radili i probajte ispočetka na drugačiji način.

Eto nadam se da sam bar jednom skripteru pomogao (ako ima još neki ovakav tutoral, ispričavam se ali nisam vidio.. ovo sam sve sam sada pisao)...
Ukoliko imate prijedlog, primjedbu recite u odgovoru i urediti ću.
Psiholog
Shot Caller
pre 13 godina
...Р৸illipS... wrote on August 17, 2012, 8:11 am:
Dobro,razumem ja tvoj trud i sve ali strcmp na mod od 0  😕 Nikako,ili zmcd ili ycmd !


ma znam ja to nego su svi na početku tvrdoglavi pa idu na strcmp... Kad se vratim kući (sutra) editat ću i stavit zcmd uz ovo...
Data64.dll
Street Runner
pre 13 godina
Lijepo ti je ovo, a na strcmp sam napravio 2 moda od nule i svi su uspjeli nisu imali warninga ni errora niti je crashao server, jest jednom slucajno je zastario sistem komandi, pa sam to prebacio na fs 😄
ThE P.A.W.n !
Hustler
pre 13 godina
Data64.dll wrote on August 17, 2012, 10:08 am:
Lijepo ti je ovo, a na strcmp sam napravio 2 moda od nule i svi su uspjeli nisu imali warninga ni errora niti je crashao server, jest jednom slucajno je zastario sistem komandi, pa sam to prebacio na fs 😄


To je jako neoptimizovan mod.

@Autor - Odlican tut,mozes svaki dan da dodas po nesto,nego od pogresnog dela si krenuo,trebao si prvo chat,pa /me ,/b komande....
[SS] Speedy
Hustler
pre 13 godina
zcmd bi trebalo za pocetak.. lijep tutorial 7/10
Daniel_Fazlijevic
Crime Lord
pre 13 godina
Dobar tut../
Davidoff
Crime Lord
pre 13 godina
Dobar tut ja sam sam pocetnik i ja se ne razumijem u to include zmcd dini i to nego sam cuo od nekih skriptera da je zcmd najbolji pa radim na zmcd,a imam i dini i YSI i ima li dje tutove za ovo da naucim nesto o ovim includama?
Psiholog
Shot Caller
pre 13 godina
Data64.dll wrote on August 17, 2012, 10:08 am:
Lijepo ti je ovo, a na strcmp sam napravio 2 moda od nule i svi su uspjeli nisu imali warninga ni errora niti je crashao server, jest jednom slucajno je zastario sistem komandi, pa sam to prebacio na fs 😄


nevalja strcmp.. ovo sam stavio kao što sam rekao samo radi toga što su početnici tvrdoglavi pa koriste strcmp (priznajem jesam i ja, al nakon što sam probao zcmd nisam koristio strcmp uopće xD

Jednom prilikom sam negdje pročitao da su na početku moda ZCMD i YCMD jednaki, možda je samo malo ZCMD brži, ali što server ima više komandi, to se YCMD više isplati (međutim teži je a ja se držim svejedno ZCMDa xD)

btw. ovo sam napravio čisto zbog ove teme jer ovi neki početnici u sampu traže skriptera za server a nemaju ni 0 postova pa kao nude vlasnika...Mislim 1 ili 2 su čovika u ciloj temi ponudila kao novac za nagradu... Pa neka ljudi nauče bar osnove pa naprave jednostavan mod ili nešto a ne ovako tražit skriptera ili navodno editan mod (a editano ime samo) pa radit server i davat milijune na početku...
FlasHica
Kingpin
pre 13 godina
Mrzim kad pričaju o optimizaciji i misle da se to rješava korištenjem ZCMD-a !!!

OT:
Pohvala za trud.  🙂
Ima par greÅ¡aka al ću ti navest samo jednu.  😁
if (strcmp("/help", cmdtext, true, 10) == 0)

bi išlo ovako
if (strcmp("/help", cmdtext, true, 5) == 0)

ili
if(!strcmp(cmdtext, "/help", true, 5))
Psiholog
Shot Caller
pre 13 godina
K4 wrote on August 17, 2012, 6:46 pm:
Mrzim kad pričaju o optimizaciji i misle da se to rješava korištenjem ZCMD-a !!!

OT:
Pohvala za trud.  🙂
Ima par greÅ¡aka al ću ti navest samo jednu.  😁
if (strcmp("/help", cmdtext, true, 10) == 0)

bi išlo ovako
if (strcmp("/help", cmdtext, true, 5) == 0)

ili
if(!strcmp(cmdtext, "/help", true, 5))


e hvala, ispravio sam... zaboravim da treba taj broj minjat, kako ne koristim srcmp xD
Nikola Zero
Shot Caller
pre 13 godina
Dobar tut.
Koby
Rookie
pre 13 godina
Dobar tutorijal ovo mi je prva komanda da sam uspio napravit 😄
Hvala na pomoci.

Morate biti prijavljeni da biste odgovorili na ovu temu.

Prijava