Peršokti į turinį

Ieškau projekto į kurį galėčiau prisijungti (ĮDĖTAS KODO PAVYZDYS)


Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 1339 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

Sveiki,
Daug nenoriu plėstis viešai, bet kas susidomėję ir ieškosi komandos narių į projektą, laukiu jūsų až. Ir ten viską aptarsim.
Aš projekte galiu užsiimti kodavimu arba map'inimu, bet pirmenybę duodu skripterio pozicijai.
Esu kupinas įdėjų serverio sistemoms bei pats turiu nemažai pasiulymų naujo projekto vizijoms.

Paskutiniai daryti map darbai: https://imgur.com/a/bbFEkXJ

Seni skripto darbai:
https://imgur.com/a/rPBwh
https://imgur.com/a/38sf7gq

* Naujas pavyzdys su kodu!
* Medkirčių sistema:

[Nuotraukos]

 


9U6T7Ka.png?1

c0QV5Bo.png?1

TTaSXob.png?1

emmKb6P.png?1

v2FfxcZ.png?1

DMg0FK9.png?1

7fAJ9JD.png?1

ZAiwNr0.png?1

 


[Kodas]

 

//Serveris
forward GlobalTimerEx();
new GlobalTimer;

//Darbas [ Medkirtys ]
#define JOB_WOODCUTTER 1 // Darbo ID
#define JOB_WOODCUTTER_SKIN 27 // Darbo išvaizdos ID
#define JOB_WOODCUTTER_POS 2355.9858, -652.7332, 128.1092 // Įsidarbinimo kordinatės

//Dialog'ai
#define DIALOG_NONE 0 // Informacijos dialog'as
#define DIALOG_WOODCUTTER 1 // Įsidarbinimo dialog'as
#define DIALOG_JOB_LEAVE 2 // Išėjimo dialog'as (iš visų darbų)
#define DIALOG_JOB_CONFIRM_LEAVE 3 // Išėjimo patvirtinimo dialog'as (jeigu žaidėjas turi dar galiojanti kontrakta)

//Žaidėjo masyvai ir kintamieji
new pJob[MAX_PLAYERS];
new pJobContract[MAX_PLAYERS];

//Medžio kirtimas
#define MAX_TREES 2
enum TreeInfoEx
{
	Object,
	Float:tPos[3],
	Text3D:tLabel,
	CuttingProgression
};
new TreeInfo[MAX_TREES][TreeInfoEx];

new CuttingTreeTimer[MAX_PLAYERS];
new WhichTreeIsBeingCutted[MAX_PLAYERS];
main(){}


public OnGameModeInit()
{
	//Global'us timer'is
	GlobalTimer = SetTimer("GlobalTimerEx", 1000, true);
	
	//Label'iai ir pickup'ai
    Create3DTextLabel("{8CD790}Medkirčio darbas\n{e0e0e0}Spauskite {8CD790}Y {e0e0e0}mygtuką", -1, JOB_WOODCUTTER_POS, 12.0, 0, 0);
    CreatePickup(1239, 1, JOB_WOODCUTTER_POS, -1);

	//Medžių kurimas
    CreateTree(0,2360.0989, -660.1553, 126.8978);
	return 1;
}
public OnGameModeExit()
{
	KillTimer(GlobalTimer);
	return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
	StopCuttingTree(playerid);
	return 1;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
	if(newkeys & KEY_YES)
	{
	    if(IsPlayerInRangeOfPoint(playerid, 2.0, JOB_WOODCUTTER_POS))
	    {
	        if(pJob[playerid] != 0 && pJob[playerid] != JOB_WOODCUTTER) return SendClientMessage(playerid, -1, "{FF0000}••• {FFFFFF}Jūs jau esate įdarbintas kitur!");
			if(pJob[playerid] == JOB_WOODCUTTER)
			{
                ShowWoodCutterDialog(playerid,DIALOG_JOB_LEAVE);
                return 1;
			}
			ShowWoodCutterDialog(playerid,DIALOG_WOODCUTTER);
	    }
		if(pJob[playerid] == JOB_WOODCUTTER)
		{
			for(new i = 0; i < MAX_TREES; i++)
			{
			    if(IsPlayerInRangeOfPoint(playerid, 6.0, TreeInfo[i][tPos][0],TreeInfo[i][tPos][1],TreeInfo[i][tPos][2]))
			    {
			        if(TreeInfo[i][CuttingProgression] < 1) return SendClientMessage(playerid, -1, "{FF0000}••• {FFFFFF}Šis medis jau yra nupjautas!");
			        WhichTreeIsBeingCutted[playerid] = i;
			        TogglePlayerControllable(playerid,0);
			        GivePlayerWeapon(playerid, 9, 1);
			        SetPlayerArmedWeapon(playerid,9);
			        ApplyAnimation(playerid,"CHAINSAW","CSAW_1",4.1,1,1,1,1,1,1);
                    GameTextForPlayer(playerid, "~g~100~w~/~g~100", 1000, 3);
			        CuttingTreeTimer[playerid] = SetTimerEx("CuttingTreeTimerEx", 1000, true, "i", playerid);
			    }
			}
		}
	}
	return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
	switch(dialogid)
	{
	    case DIALOG_WOODCUTTER:
	    {
	        if(response)
	        {
	            if(pJobContract[playerid]>0) return SendClientMessage(playerid, -1, "{FF0000}••• {FFFFFF}Jūsų darbo kontraktas yra dar galiojantis, todėl įsidarbinti negalite!");
	            pJob[playerid] = JOB_WOODCUTTER;
	            SetPlayerSkin(playerid, JOB_WOODCUTTER_SKIN);
	            pJobContract[playerid] = 3600*7;
	            SendClientMessage(playerid, -1, "{FFCC66}••• {FFFFFF}Jūs sėkmingai įsidarbinote ir tapote {FFCC66}medkirčiu {FFFFFF}!");
	            SendClientMessage(playerid, -1, "{FFCC66}••• {FFFFFF}Darbo informaciją ir komandas rasite parašę {FFCC66}/darbas {FFFFFF}!");
	        }
	    }
	    case DIALOG_JOB_LEAVE:
	    {
	        if(response)
	        {
	            if(pJobContract[playerid]>0) return ShowWoodCutterDialog(playerid,DIALOG_JOB_CONFIRM_LEAVE);
	            pJob[playerid] = 0;
	            SetPlayerSkin(playerid, 0);
	            SendClientMessage(playerid, -1, "{FFCC66}••• {FFFFFF}Sėkmingai palikote darbą!");
	        }
	    }
	    case DIALOG_JOB_CONFIRM_LEAVE:
	    {
	        if(response)
	        {
	            pJob[playerid] = 0;
	            SetPlayerSkin(playerid, 0);
	            SendClientMessage(playerid, -1, "{FFCC66}••• {FFFFFF}Sėkmingai palikote darbą!");
	        }
	    }
	}
	return 1;
}
forward CuttingTreeTimerEx(playerid);
public CuttingTreeTimerEx(playerid)
{
	new msg[32];
	new treeID = WhichTreeIsBeingCutted[playerid];
	TreeInfo[treeID][CuttingProgression]-=5;
	format(msg, sizeof(msg), "~g~%d~w~/~g~100",TreeInfo[treeID][CuttingProgression]);
	GameTextForPlayer(playerid, msg, 1000, 3);
	if(TreeInfo[treeID][CuttingProgression]<1)
	{
		StopCuttingTree(playerid);
		TreeWasCuttedDown(treeID);
	    SendClientMessage(playerid, -1, "{FFCC66}••• {FFFFFF}Sėkmingai nupjovėte medį!");
	    SendClientMessage(playerid, -1, "{FFCC66}••• {FFFFFF}Už medžio nupjovimą gavote 20€!");
	    GivePlayerMoney(playerid,CuttingTreeTimer[playerid]);
	}
}
public GlobalTimerEx()
{
    for(new i = 0;i<=GetPlayersOnServer();i++)
    {
        if(pJobContract[i]>0)
        {
            pJobContract[i]--;
            if(pJobContract[i] == 0)
			{
			    SendClientMessage(i, -1, "{FFCC66}••• {FFFFFF}Jūsų darbo kontraktas pasibaigė!");
			}
        }
	}
}
forward GrowTree(id);
public GrowTree(id)
{
    TreeInfo[id][Object] = CreateDynamicObject(615, TreeInfo[id][tPos][0], TreeInfo[id][tPos][1], TreeInfo[id][tPos][2],   0.00000, 0.00000, 0.00000);
    Update3DTextLabelText(TreeInfo[id][tLabel], -1, "{8CD790}Medis\n{e0e0e0}Norint pradėti kirtimą spauskite {8CD790}Y {e0e0e0}mygtuką");
    TreeInfo[id][CuttingProgression] = 100;
}
CMD:kontraktas(playerid)
{
    new msg[516],Hours,Seconds,Minutes;
	Seconds = pJobContract[playerid];
	while(Seconds >= 60)
	{
		Seconds -= 60;
		Minutes++;
	}
	while(Minutes >= 60)
	{
		Minutes -= 60;
		Hours++;
	}
	format(msg, sizeof(msg), "{FFCC66}[ ? ]: {FFFFFF}Iki jūsų darbo kontrakto pabaigos liko [{FFCC66}%d {FFFFFF}val., {FFCC66}%d {FFFFFF}min., {FFCC66}%d {FFFFFF}sec.]",Hours,Minutes,Seconds);
	SendClientMessage(playerid, -1, msg);
	return 1;
}
stock RemovePlayerWeapon(playerid, weaponid)//Credits to Xalphox
{
    if(!IsPlayerConnected(playerid) || weaponid < 0 || weaponid > 50) return;
    new saveweapon[13], saveammo[13];
    for(new slot = 0; slot < 13; slot++) GetPlayerWeaponData(playerid, slot, saveweapon[slot], saveammo[slot]);
    ResetPlayerWeapons(playerid);
    for(new slot; slot < 13; slot++)
    {
        if(saveweapon[slot] == weaponid || saveammo[slot] == 0)
            continue;
        GivePlayerWeapon(playerid, saveweapon[slot], saveammo[slot]);
    }

}
stock ShowWoodCutterDialog(playerid,id)
{
	switch(id)
	{
	    case DIALOG_WOODCUTTER:
		{
			ShowPlayerDialog(playerid, DIALOG_WOODCUTTER, DIALOG_STYLE_MSGBOX, "{FFFFFF}Medkirčio darbas", "{FFFFFF}Ar tikrai norite įsidarbinti į {FFCC66}medkirčio {FFFFFF}poziciją\n{FFFFFF}Sutikdami dirbti čia jūs tūrėsite išdirbti bent {FFCC66}7h{FFFFFF}(pagal darbo kontraktą).", "{FFFFFF}Įsidarbinti", "{FFFFFF}Išeiti");
		}
	    case DIALOG_JOB_LEAVE:
		{
			ShowPlayerDialog(playerid, DIALOG_JOB_LEAVE, DIALOG_STYLE_MSGBOX, "{FFFFFF}Išėjimas iš darbo", "{FFFFFF}Ar tikrai norite palikti savo darbovietę ?\n{FFFFFF}Jeigu paliksite darbovietę su vis dar galiojančiu darbo kontraktu tai jums gresia:\n \n\t{FFCC66}• {FFFFFF}Draudimas įsidarbinti į kitą darbovietę kol galios darbo kontraktas", "{FFFFFF}Palikti", "{FFFFFF}Atšaukti");
		}
	    case DIALOG_JOB_CONFIRM_LEAVE:
		{
			ShowPlayerDialog(playerid, DIALOG_JOB_CONFIRM_LEAVE, DIALOG_STYLE_MSGBOX, "{FFFFFF}Išėjimas iš darbo", "\t\t{FFFFFF}[ {FF0000}DĖMESIO ! {FFFFFF}]\n{FFFFFF}Ar tikrai norite palikti savo darbovietę su galiojančiu darbo kontraktu?\n{FFFFFF}Jeigu paliksite darbovietę su vis dar galiojančiu darbo kontraktu({FF0000}/kontraktas{FFFFFF}) tai jums gresia:\n \n\t{FF0000}• {FFFFFF}Draudimas įsidarbinti į kitą darbovietę kol galios darbo kontraktas", "{FFFFFF}Palikti", "{FFFFFF}Atšaukti");
		}
	}
	return 1;
}
stock TreeWasCuttedDown(id)
{
	DestroyDynamicObject(TreeInfo[id][Object]);
	Update3DTextLabelText(TreeInfo[id][tLabel], -1, "{8CD790}Medis\n{e0e0e0}Buvo nukirstas\n \nUž {8CD790}10min. {e0e0e0}išaugs naujas medis!");
    SetTimerEx("GrowTree", 60000*10, false, "d", id);
}
stock StopCuttingTree(playerid)
{
    KillTimer(CuttingTreeTimer[playerid]);
    ClearAnimations(playerid);
    RemovePlayerWeapon(playerid, 9);
    WhichTreeIsBeingCutted[playerid] = 0;
    TogglePlayerControllable(playerid,1);
}
stock CreateTree(id,Float:treeX,Float:treeY,Float:treeZ)
{
    TreeInfo[id][tPos][0] = treeX;
    TreeInfo[id][tPos][1] = treeY;
    TreeInfo[id][tPos][2] = treeZ;
    TreeInfo[id][Object] = CreateDynamicObject(615, TreeInfo[id][tPos][0], TreeInfo[id][tPos][1], TreeInfo[id][tPos][2],   0.00000, 0.00000, 0.00000);
    TreeInfo[id][tLabel] = Create3DTextLabel("{8CD790}Medis\n{e0e0e0}Norint pradėti kirtimą spauskite {8CD790}Y {e0e0e0}mygtuką", -1, TreeInfo[id][tPos][0],TreeInfo[id][tPos][1],TreeInfo[id][tPos][2]+1.0000, 12.0, 0, 0);
    TreeInfo[id][CuttingProgression] = 100;
}
stock GetPlayersOnServer()
{
	new count;
	for(new i=0; i < MAX_PLAYERS; i++)
	{
 		if(IsPlayerConnected(i))
 		{
			count++;
		}
	}
	return count;
}


 

 

Redaguota , nario Ministras misteris
Nuoroda į komentarą
Dalintis per kitą puslapį

Jei taikais į skripterio poziciją, norėtųsi pamatyti tavo parašytas sistemas iš kodo pusės. Kartais žmogus gali padaryti serveryje gerai atrodančias sistemas, tačiau pats kodas yra neoptimizuotas, daug besikartojančių kodo eilučių kai viską galima įdėti į vieną funkciją ir panašiai. Manau tas ir sužlugdė libertį, nes zavaskas kodint nemokėjo normaliai. Nepagailėk vienos sistemos ir parodyk pavizdį, nes yra tekę dirbt su pora skripterių, kurie atitinka aukščiau pateiktą pavizdį ir tai į gerą neišeina, nes pačiam tenka taisyt kodą.

Nuoroda į komentarą
Dalintis per kitą puslapį

15 minutes prieš, Michael_Scott parašė:

Jei taikais į skripterio poziciją, norėtųsi pamatyti tavo parašytas sistemas iš kodo pusės. Kartais žmogus gali padaryti serveryje gerai atrodančias sistemas, tačiau pats kodas yra neoptimizuotas, daug besikartojančių kodo eilučių kai viską galima įdėti į vieną funkciją ir panašiai. Manau tas ir sužlugdė libertį, nes zavaskas kodint nemokėjo normaliai. Nepagailėk vienos sistemos ir parodyk pavizdį, nes yra tekę dirbt su pora skripterių, kurie atitinka aukščiau pateiktą pavizdį ir tai į gerą neišeina, nes pačiam tenka taisyt kodą.

Ačiū labai už pasiūlymą, rytoj būtinai atnaujinsiu temą su kodo pavyzdžiais.

Nuoroda į komentarą
Dalintis per kitą puslapį

Su kodu viskas kaip ir tvarkoje, tačiau duosiu vieną patarimą, kurį norėčiau, kad būčiau sužinojęs daug anksčiau.

Vietoje

new CuttingTreeTimer[MAX_PLAYERS];
new WhichTreeIsBeingCutted[MAX_PLAYERS];

naudok PVar. Tokiems kintamiesiems, kurie 99% laiko bus nenaudojami žaidėjų serveryje, siūlyčiau naudoti PVar. Paprasčiausiai su PVar tu visiems žaidėjams nekursi kintamojo nors jie jo nenaudos. Kai tau reikia, su SetPVarInt (arba string, arba float) pakeiti reikšmę, kai nebereikia padarai DeletPVar ir tiesiog ištrini tą kintamajį žaidėjui. Tokia funkcija ypač pasitarnauja tuo ,kad atsijungus kintamojo reikšmės neišsisaugo tam tikram žaidėjo id, nes dabar prisijungus žaidėjui tu turėtum WhichTreeIsBeingCutted padaryt į 0 ir panašiai, o PVar automatiškai jį ištrina

Štai tau viskas paaiškinta 

image.png.dc2daf61701d298988f279817659e93a.png

https://wiki.sa-mp.com/wiki/Per-player_variable_system wiki gali viską susirast. Tokius kintamuosius geriausia naudot kai jie yra nedažnai naudojami, nes veikia lėčiau.

Nuoroda į komentarą
Dalintis per kitą puslapį

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 1339 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ą...