Jump to content

Raketa na príkaz


sneksnack

Recommended Posts

Takže dnes som sa nudil a pripravil som pre vás môj prvý TUT. Je to taký jednoduchý "raketomet na príkaz", stačí /rocket ID a už to letí... ;)

 

Definície, nejaké stocky a newy (najlepšie hore):

#define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
#define BIELA 0xFFFFFFAA 
#define ZLTA 0xFFDD00FF 
#define CERVENA 0xFF0011FF 

new bool:strela_on[MAX_PLAYERS];
new strela[MAX_PLAYERS];

forward UpdateRocket();

stock SetObjectLookAt(objectid, Float:x, Float:y)
{
new Float:Px, Float:Py, Float: Pa;
GetObjectPos(objectid,Px,Py,Pa);
Pa = floatabs(atan((y-Py)/(x-Px)));
if(x <= Px && y >= Py) Pa = floatsub(180.0,Pa);
else if(x < Px && y < Py) Pa = floatadd(Pa,180.0);
else if(x >= Px && y <= Py) Pa = floatsub(360.0,Pa);
Pa = floatsub(Pa,90.0);
if(Pa >= 360.0) Pa = floatsub(Pa,360.0);
SetObjectRot(objectid,0,0,Pa);
return 1;
}


stock PlayerName(playerid)
{
new name[60];
GetPlayerName(playerid, name, 60);
return name;
}

 

OnGameModeInit

SetTimer("UpdateRocket",50,1); //nastavíme timer

 

OnPlayerCommandText:

dcmd(rocket,6,cmdtext); //príkaz

 

Samotný príkaz:

dcmd_rocket(playerid, params[])
{
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid,BIELA,"[ ! ] Nie si RCON admin!"); //ak nie je RCON
if(!strlen(params)) return SendClientMessage(playerid, CERVENA, "** /rocket ID"); //ak nezadal ID hráča
new id=strval(params);
if(!IsPlayerConnected(id))return SendClientMessage(playerid,CERVENA,"** Hráč nie je online!"); //ak hráč nie je online
if(strela_on[id]==true)return SendClientMessage(playerid,CERVENA,"** Pôvodná raketa ešte netrafila tohto hráča!"); //ak už bola na raketa poslaná raketa
new string[100]; //vytvoríme si string pre SendClientMessage
new Float:x,Float:y,Float:z,Float:x2,Float:y2,Float:z2; //premenné
GetPlayerPos(playerid,x,y,z); //zistíme pozíciu hráča pod RCON
GetPlayerPos(id,x2,y2,z2); //zistíme pozíciu hráča
format(string,100,"[ ! ] Raketa smeruje na hráča %s(%d)!",PlayerName(id),id); //vytvoríme string pre odoslanie
strela_on[id]=true; //nastavíme hráčovi premennú
strela[id]=CreateObject(345,x,y,z,0,0,0); //vytvoríme objekt rakety
SetObjectLookAt(strela[id],x2,y2); //natočíme raketu na hráča
MoveObject(strela[id],x2,y2,z2,50); //posunieme raketu ku hráčovi
SendClientMessage(playerid,ZLTA,string); //odšleme správu
return 1;
}

Public na kontrolu rakety:

public UpdateRocket()
{
for(new i;i<500;i++)//obehneme všetkých hráčov
{
	if(strela_on[i]==true)//ak na hráča smeruje raketa
	{
		new Float:x,Float:y,Float:z,Float:x2,Float:y2,Float:z2; //premenné
		GetPlayerPos(i,x,y,z); //zistíme pozíciu hráča
		GetObjectPos(strela[i],x2,y2,z2); //zistíme pozíciu rakety
		if(x==x2 && y==y2 && z==z2) //ak sa pozícia rakety a hráča rovná
		{
			DestroyObject(strela[i]); //zničíme raketu
			strela_on[i]=false; //nastavíme premennú
			CreateExplosion(x,y,z,6,5.0); //vytvoríme explóziu
		}
		else //ak sa pozície nerovnajú
		{
			MoveObject(strela[i],x,y,z,50); //posunieme raketu ku hráčovi
			SetObjectLookAt(strela[i],x,y); //natočíme raketu
		}
	}
}
}

 

Toť vše! :thumbup:

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...