Jump to content

script Minomet


Apache

Recommended Posts

Zdravím,
tak mě napadlo, udělat minomet, ve stylu tepelného zaměřování, attachuntý na Yosemite.
Do hlavy mi skočila myšlenka, tak sem se jí teda snažil udělat co nejreálněji.. 
Script obsahuje celkem 3 příkazy, /yosemite pro spawnutí vozidla s minometem, /desyosemite a /sestrelit id.
A ted samotné vystřelení, pro sestřelí zadaného ID nesmí být od vás víc jak 200 metrů. Při výsřelu letí projektil svísle nad vás a přibližně po 500 metrech začne padat na zadané ID řízený projektil.
Při testování sem žádný bug nenašel.
Sem nováček, tak berte ohled na to, že né vše bude napsané zrovna nejlíp :d
 
Downoad > http://ulozto.cz/xMFE8pVb/minomet-sa-mp-rar <
 


#include <a_samp>

#define SCM SendClientMessage

new Yosemite;
new Javelin;
new Projektil;
new Nabiti[MAX_PLAYERS];
new VY[MAX_PLAYERS];

new Sestreleny;


public OnFilterScriptInit()
{
	print("\n--------------------------------------");
	print(" Minomet by Misan");
	print("--------------------------------------\n");
	SetTimer("YosemiteInfo", 600000, true);
	return 1;
}

forward YosemiteInfo(playerid);
public YosemiteInfo(playerid)
{
	if(!IsPlayerAdmin(playerid)) return SCM(playerid, 0x00FF00, "Na serveru se nachází pojízdný minomet, můžeš požádat RCON administrátora, aby ti ho spawnul!");
	else if(IsPlayerAdmin(playerid)) return SCM(playerid, 0x00FF00, "Na serveru se nachází pojízdný minomet, pro použití zadej /yosemite nebo /sestrelit id");
	return 1;
}

forward NabitiJavelinu(playerid);
public NabitiJavelinu(playerid)
{
	Nabiti[playerid] = 0;
	return 1;
}

forward ZamireniCile(playerid);
public ZamireniCile(playerid)
{
	new Float: X, Float: Y, Float: Z;
	new Float: OX, Float: OY, Float: OZ;
	GetPlayerPos(Sestreleny, X, Y, Z);
	GetObjectPos(Projektil, OX, OY, OZ);
	MoveObject(Projektil, X, Y, Z, 35);
	SetTimerEx("TepelneZamerovani", 10, 1, "i", playerid);
	if(OZ == Z)
	{
	    DestroyObject(Projektil);
	}
	return 1;
}

forward TepelneZamerovani(playerid);
public TepelneZamerovani(playerid)
{
    new Float: X, Float: Y, Float: Z;
	new Float: OX, Float: OY, Float: OZ;
	GetPlayerPos(Sestreleny, X, Y, Z);
	GetObjectPos(Projektil, OX, OY, OZ);
	MoveObject(Projektil, X, Y, Z, 70);
    if(OZ + random(1) == Z)
	{
	    DestroyObject(Projektil);
	    CreateExplosion(OX, OY , OZ, 6, 10);
	}
	return 1;
}


public OnVehicleDeath(vehicleid, killerid)
{
	DestroyVehicle(Yosemite);
	DestroyObject(Javelin);
	return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
	if (strcmp("/yosemite", cmdtext, true, 10) == 0)
	{
	    if(!IsPlayerAdmin(playerid)) return SCM(playerid, 0x00FF00, "[!] Tento příkaz je určen pro RCON administrátory [!]");
	    else if(IsPlayerAdmin(playerid))
	    {
			new Float:X, Float:Y, Float:Z, Float:A, Jmeno[15], Text[65];
			GetPlayerPos(playerid, X, Y, Z);
			GetPlayerFacingAngle(playerid, A);
			Yosemite = CreateVehicle(554, X, Y, Z, A, 0, 1, 3000);
			Javelin = CreateObject(360, X, Y, Z,   0.00000, -90.00000, 90.00000);
			AttachObjectToVehicle(Javelin, Yosemite, -0.02941, -0.68162, 0.40010,   0.00000, -90.00000, 90.00000);
			GetPlayerName(playerid, Jmeno, sizeof (Jmeno));
			format(Text, sizeof(Text),"[!] RCON Administrátor %s spawnul pojízdný minomet [!]",Jmeno);
			SendClientMessageToAll(0x00FF00, Text);
		}
		return 1;
	}
	if (strcmp("/desyosemite", cmdtext, true, 10) == 0)
	{
	    new Jmeno[15], Text[65];
	    DestroyVehicle(Yosemite);
	    GetPlayerName(playerid, Jmeno, sizeof (Jmeno));
	    format(Text, sizeof(Text),"[!] RCON Admistrátor %s nechal pojízdný minomet zničit [!]",Jmeno);
	    SendClientMessageToAll(0x00FF00, Text);
	    DestroyObject(Javelin);
	    return 1;
	}
	if (strcmp("/sestrelit", cmdtext, true, 10) == 0)
	{
	    new Float:X, Float:Y, Float: Z, SJmeno[15], Jmeno[15], Text[60];
        Sestreleny = strval(cmdtext);
	    GetPlayerPos(playerid, X, Y, Z);
	    GetPlayerName(Sestreleny, SJmeno, sizeof(SJmeno));
	    if(!strlen(cmdtext)) return SCM(playerid, 0x00FF00, "[!] Použití /sestrelit id [!]");
	    else if(!IsPlayerConnected(Sestreleny)) return SendClientMessage(playerid, 0x00FF00, "[!] Žádné takové ID není připojené [!]");
	    else if(playerid == Sestreleny) return SCM(playerid, 0x00FF00, "[!] Šílenče! Chceš se snad nechat zabít?  [!]");
        if(IsPlayerInRangeOfPoint(Sestreleny, 200, X, Y, Z))
        {
            if(Nabiti[playerid] == 0)
            {
                if(VY[playerid] == 1)
                {
		            GetPlayerName(playerid, Jmeno, sizeof(Jmeno));
					format(Text, sizeof(Text),"[!] Hráč %s vystřelil z minometu na hráče %s [!]", Jmeno, SJmeno);
					SendClientMessageToAll(0x00FF00, Text);
					Projektil = CreateObject(345, X -0.07671, Y -0.84980, Z + 1.10453,   90.00000, 0.00000, 0.00000);
					MoveObject(Projektil, X, Y, Z + 3000, 32);
					Nabiti[playerid] = 1;
					SetTimerEx("NabitiJavelinu", 10000, false, "i", playerid);
					SetTimerEx("ZamireniCile", 4000, false, "i", playerid);
				}
				else SCM(playerid, 0x00FF00, "[!] Nejsi ve speciálním yosemitu [!]");
			}
			else GameTextForPlayer(playerid, "Nabijim", 1000, 1);
        }
		else if(!IsPlayerInRangeOfPoint(Sestreleny, 200, X, Y, Z)) return SCM(playerid, 0x00FF00, "[!] Hráč na kterého se chystáš vystřelit musí být od tebe míň jak 200 metrů [!]");
		return 1;
	}
	return 0;
}

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
	if(vehicleid == Yosemite)
	{
	    VY[playerid] = 1;
	    SCM(playerid, 0x00FF00, "Nasednul si do vojenského Yosemitu, pro vystřelení z minometu zadej /sestrelit id");
	}
	return 1;
}
public OnPlayerExitVehicle(playerid, vehicleid)
{
	if(vehicleid == Yosemite)
	{
	    VY[playerid] = 0;
	}
	return 1;
}

Minomet SA-MP.rar

  • Líbí se mi to! (+1) 1
Link to comment
Share on other sites

Ty nováčik... Nováčikovia nepíšu scripty, nováčikovia sa pýtaju na to prečo im nefunguje script bez semi-colonov.

 

Ak si naozaj taký nováčik ako hovoríš, máš moje uznanie, určite pokračuj v učení sa.

Link to comment
Share on other sites

  • Globální moderátor

Ne všichni jsou jako ty Cybri :d
 
Celej ten public YosemiteInfo je špatně. Kontroluješ jednou za 60 000ms jestli hráč ID 0 je admin.

 

new Nabiti[MAX_PLAYERS];
new VY[MAX_PLAYERS];

 

Tohle mohlo být bool, ale z hlediska paměti je to asi jedno.

 

if(!strlen(cmdtext)) return SCM(playerid, 0x00FF00, "[!] Použití /sestrelit id [!]");

 

Tohle ti vrátí vždy true, cmdtext je včetně toho příkazu tzn. cmdtext[0-9] = "/sestrelit"

 

new Jmeno[15]

Jenom drobnost, nick v sa-mp může být dlouhý 24 znaků

 

if(!IsPlayerAdmin(playerid)) return SCM(playerid, 0x00FF00, "[!] Tento příkaz je určen pro RCON administrátory [!]");
     else if(IsPlayerAdmin(playerid))

 

No buď je admin nebo není, tam není už potřeba zjišťovat jestli admin je. 

 

if(!IsPlayerAdmin(playerid)) return ...
else
{

     //kod

}
 

 

No jinak dobrá práce

Link to comment
Share on other sites

Nápad je to můj.. Napadlo mě to při sledování jednoho videa.. Celkové v poslední době dělám podobné scripty, jako třeba bombarder, rakety na rustlera atd. No.. Tohle narozdíl od ostatních aspoň funguje :d video bych mohl nahrat.. Kdyžtak to tu zítra dám

 

chcelo by to video, ale z popisu to vyzera ako dobry napad, ktory sa ceni. Teda pokial je to naozaj tvoj napad.
Edited by Apache
Link to comment
Share on other sites

~> Tak hodnocení ke konci a ke kódu: já bych měl k němu už jenom takové dodatky typu někde zbytečné rozsáhlejší podmínkování, trošku špatně pole(EDIT: ach, na to už narážel HP :d), návratové hodnoty... ale, pokud tě to napadlo jako fakt tebe, nikde jsi nic podobného neviděl, ani návod ani script, tak u mě máš plus už jenom za zajímavý nápad... už to chtělo něco jiného, kromě neustálého tipy, vip, warpy...
Link to comment
Share on other sites

Jedine co nebylo z mojí hlavy, bylo to CreateExplosion a použití /prikaz id.. Jinak vsě sem se snažil napsat z toho co sem se v poslední době naučil

 

~> Tak hodnocení ke konci a ke kódu: já bych měl k němu už jenom takové dodatky typu někde zbytečné rozsáhlejší podmínkování, trošku špatně pole(EDIT: ach, na to už narážel HP :d), návratové hodnoty... ale, pokud tě to napadlo jako fakt tebe, nikde jsi nic podobného neviděl, ani návod ani script, tak u mě máš plus už jenom za zajímavý nápad... už to chtělo něco jiného, kromě neustálého tipy, vip, warpy...

Jak říkám.. :d s pawnem sem teprve na začátku.. Nějaké funkce size znám, ale nějaké zase ne.. Například zmiňovaný bool Slyším poprvé :d

 

Ne všichni jsou jako ty Cybri :d

 

Celej ten public YosemiteInfo je špatně. Kontroluješ jednou za 60 000ms jestli hráč ID 0 je admin.

 

new Nabiti[MAX_PLAYERS];

new VY[MAX_PLAYERS];

 

Tohle mohlo být bool, ale z hlediska paměti je to asi jedno.

 

if(!strlen(cmdtext)) return SCM(playerid, 0x00FF00, "[!] Použití /sestrelit id [!]");

 

Tohle ti vrátí vždy true, cmdtext je včetně toho příkazu tzn. cmdtext[0-9] = "/sestrelit"

 

new Jmeno[15]

Jenom drobnost, nick v sa-mp může být dlouhý 24 znaků

 

if(!IsPlayerAdmin(playerid)) return SCM(playerid, 0x00FF00, "[!] Tento příkaz je určen pro RCON administrátory [!]");

else if(IsPlayerAdmin(playerid))

 

No buď je admin nebo není, tam není už potřeba zjišťovat jestli admin je.

 

if(!IsPlayerAdmin(playerid)) return ...

else

{

//kod

}

 

 

No jinak dobrá práce

Edited by Apache
Link to comment
Share on other sites

Ne všichni jsou jako ty Cybri :d

 

Celej ten public YosemiteInfo je špatně. Kontroluješ jednou za 60 000ms jestli hráč ID 0 je admin.

 

new Nabiti[MAX_PLAYERS];

new VY[MAX_PLAYERS];

 

Tohle mohlo být bool, ale z hlediska paměti je to asi jedno.

 

if(!strlen(cmdtext)) return SCM(playerid, 0x00FF00, "[!] Použití /sestrelit id [!]");

 

Tohle ti vrátí vždy true, cmdtext je včetně toho příkazu tzn. cmdtext[0-9] = "/sestrelit"

 

new Jmeno[15]

Jenom drobnost, nick v sa-mp může být dlouhý 24 znaků

 

if(!IsPlayerAdmin(playerid)) return SCM(playerid, 0x00FF00, "[!] Tento příkaz je určen pro RCON administrátory [!]");

     else if(IsPlayerAdmin(playerid))

 

No buď je admin nebo není, tam není už potřeba zjišťovat jestli admin je. 

 

if(!IsPlayerAdmin(playerid)) return ...

else

{

     //kod

}

 

 

No jinak dobrá práce

Klamár jeden, ja viem použivať semi-colony, ja len neviem napísať nič viac než hello world a kalkulačku :d

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...