Dobro da radis skriptu od 0, jer nema nikakve logike editovat bilo koji mod, smuci ti se,
a i najlakse ti je napravit mod od 0, prilagodis ga sebi kako hoces
Skines samp0.3xserver sa sa-mp.com
pobrises one ostale modove u gamemodes, pobrises ono iz scriptfiles(foldere tacnije Properties i Vehicles)
onda ides u pawnu File>New
I onda ti je najlakse.
Preporucujem YSI, y_ini za cuvanje/citanje , ycmds za komande, brz sistem komandi, iako je i zcmd brz preporucujem ti ipak YCMD!
Onda odradis reg/log
evo ti primer:
#include
#include
#include
#include
#include
#include
forward LoadUserData(playerid, name[], value[]);
#define SCM SendClientMessage
#define DIALOG_REGISTER 1
#define DIALOG_LOGIN 2
enum pInfo
{
pPassword,
pAdmin,
pGameSage,
}
new PlayerInfo; // MAX_PLAYERS, znaci da moze za svakog igraca
// ili stavi PlayerInfo // Varijabla do samo 50 igraca, da malo bolje skontas
// MAX_PLAYERS ti je vec definisan kao 500,
main() // ispisuje ti se u konzoli prilikom startanje samp-server-a
{
print("\n----------------------------------");
print(" Moj Mod");
print("----------------------------------\n");
}
public OnGameModeInit()
{
SetGameModeText("MojModv1.0");
UsePlayerPedAnims(); // Eh ovo ti je CJ trcanje, ili sto ti kazes kao na "CH"
DisableInteriorEnterExits(); // ovo jednostavno ukida markere za ulaze u bizove kucu iz SP-a
return 1;
}
public OnGameModeExit()
{
return 1;
}
public OnPlayerRequestClass(playerid, classid)
{
return 1;
}
public OnPlayerConnect(playerid)
{
new strText, IGRACEVO_IME;
GetPlayerName(playerid, MAX_PLAYER_NAME, sizeof(MAX_PLAYER_NAME);
format(strText, 35, "Korisnici/%s.ini", IGRACEVO_IME); // formatira string, sa igracevim imenom, tj njegov fajl
if(!fexist(strText)) // provjerava ako ne postoji fajl, onda mu pokazu registraciju:
{
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registracija", "Molimo upisite lozinku da se registrujete", "Register", "Odustani");
}
else // inace, ako postoji (suprotno od !fexist(ne postoji)) // pokazuje mu login
{
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Logiranje", "Molimo upisite lozinku da se logujete", "Login", "Odustani");
return 1;
}
SetPVarInt(playerid, "Konektovan", 1); // ovo je cisto provjera za spawn, ako nije logiran kicka ga
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
SacuvajIgraca(playerid); // Funkcija skracena, da ne bi pisao ovdje pod onplayerdissconect ostalo, da ti lijepo izgleda ovako je
return 1;
}
public OnPlayerSpawn(playerid)
{
if(GetPVarInt(playerid, "Konektovan") == 1)
{
SendClientMessage(playerid, 14, "Spawn prije logina nije dozvoljen {ffffff}(Kickovan)");
Kick(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;
}
// eh callback OnPlayerComandText promjenis u ovaj, jer kad vec koristis YCMD, da ti ne mijesa se i onda ce ti strcmp komande vracat false
public OnPlayerCommandPerformed(playerid, cmdtext[], success)
{
if(success) return 1;
new xD;
format(xD, sizeof(xD),
"ERROR: Komanda %s nije pronadjena!", cmdtext);
return SendClientMessage(playerid, -1, xD);
}
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[])
{
switch(dialogid)
{
case DIALOG_REGISTER:
{
if(!response) return Kick(playerid); // ako klikne drugi gumb ili ESC Kicka ga
if(response)
{
new jstring;
if(strlen(inputtext) >= 6 && strlen(inputtext) <= 35) // ako je upisani text veci od 6 ili manji od 35!
{
new uFile;
new IME_IGRACA;
GetPlayerName(playerid, IME_IGRACA, sizeof(IME_IGRACA));
format(uFile, 35, "Korisnici/%s.ini", IME_IGRACA);
new INI:playerFile = INI_Open(uFile);
INI_WriteString(playerFile, "Lozinka", inputtext);
INI_WriteInt(playerFile, "Admin", 0);
INI_WriteInt(playerFile, "GameSage", 0);
INI_Close(playerFile);
GivePlayerMoney(playerid, 200);
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Logiranje", "Upisi pass da se logujes", "Login", "Odustani");
format(jstring, sizeof(jstring), " Uspjesno si se registrovao/la| tvoj password je: %s", inputtext);
SCM(playerid, -1, jstring);
}
else
{
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registracija", "Upisi lozinku da se registrujes [6-35 znakova]", "Register", "Odustani");
SCM(playerid, -1, " * Lozinka mora da bude izmedju 6 i 35 znakova!");
}
}
}
case DIALOG_LOGIN:
{
if(!response) return Kick(playerid);
if(response)
{
if(strlen(inputtext) >= 6 && strlen(inputtext) <= 35)
{
new uFile;
format(uFile, 35, USER_FILE, PlayerName(playerid));
INI_ParseFile(uFile, "LoadUserData", .bExtra = true, .extra = playerid);
SetPVarInt(playerid, "Prijavljen", 1);
SpawnPlayer(playerid);
if(!strcmp(PlayerInfo, inputtext, false))
{
SetPVarInt(playerid, "Ulogiran", 1);
SetPVarInt(playerid, "Konektovan", 0);
}
else
{
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Pogresna lozinka!", "Upisan je pogresan pw! Upisi ispravan password da se logujes!", "Login", "Odustani");
SendClientMessage(playerid, -1, ">>Pogresna lozinka<<");
}
}
}
}
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
}
return 1;
}
stock SacuvajIgraca(playerid)
{
new fajl_korisnika, IMEIGRACA;
GetPlayerName(playerid, IMEIGRACA, sizeof(IMEIGRACA));
format(fajl_korisnika, 35, "Korisnici/%s.ini", IMEIGRACA); // formatira string, sa igracevim imenom
new INI:playerFile = INI_Open(fajl_korisnika); // otvara fajl
INI_WriteString(playerFile, "Lozinka", PlayerInfo); // Zapisuje string, u igracev fajl
INI_WriteInt(playerFile, "Admin", PlayerInfo); // Zapisuje int u igracev fajl (INT kao broj)
INI_WriteInt(playerFile, "GameSage", PlayerInfo);
INI_Close(playerFile); // Zatvara igracev fajl
return true;
}
public LoadUserData(playerid, name[], value[])
{
INI_String("Lozinka", PlayerInfo, 129);
INI_Int("Admin", PlayerInfo);
INI_Int("GameSage", PlayerInfo);
return true;
}
}