Jump to content
  • 0

pomoc Shooter


vladasavel

Dotaz

Zdravíčko..Kdo mi pomůže s mým problémem ? dělám FS CAR DM ale problem je v tom že mi to nevypustí z auta raketu...Dal jsem si tam SCM abych zjistil co funguje a co ne...a jde o to že ALT to napíše ale raketu to nevyšle a ani ji to nyvtvoří..z timeru to nic nenapíše pro změnu vubec nic takže ten se asi ani nevyvolá....takže nevím co jsem udělal špatně.

 

PS: Ano je to z Re-voltu od DaVe

 

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
new Float:x, Float:y, Float:z, Float:a, auto; auto = GetPlayerVehicleID(playerid); GetVehiclePos(auto,x,y,z); GetVehicleZAngle(auto,a); GetXYInFrontOfPlayer(playerid,x,y,13);
  if(newkeys == KEY_FIRE)
{
       raketa[playerid] = CreateObject(3790,x,y,z,0,0,a,100);
       GetXYInFrontOfPlayer(playerid,x,y,200);
       MoveObject(raketa[playerid],x,y,z,40,0,0,a);
       SendClientMessage(playerid,-1,"ALT");
       SetTimerEx("RocketCheck", 500, true, "i", playerid);
}
  return 1;
}
public RocketCheck(playerid)
{
for(new i=0; i<MAX_PLAYERS; i++)
{
   if(IsPlayerConnected(playerid) && IsPlayerInAnyVehicle(playerid))
   {
       if(i != playerid)
       {
new Float:x, Float:y, Float:z; GetObjectPos(raketa,x,y,z);
if(IsPlayerInRangeOfPoint(playerid,12,x,y,z) && IsPlayerInAnyVehicle(playerid))
{
DestroyVehicle(GetPlayerVehicleID(playerid));
SendClientMessage(playerid,-1,"playerid");
SendClientMessage(i,-1,"I");
DestroyObject(bazuka[playerid]);
SetPlayerHealth(playerid,0);
CreateExplosion(x,y,z,1,5);
    SetPlayerHealth(playerid,0);
  }
}
}
}
  return 1;
}

Předem díky moc za odpovědi
Edited by vladasavel
Link to comment
Share on other sites

7 odpovědí na tuto otázku

Recommended Posts

  • 0

já nedělám mod..Dělam to jako FS a z toho GM re-volt jsem vzal jen to do toho timeru. Protože když jsem to měl puvodně podle sebe  tak ta raketa proletěla autem a bouchla až o kus dál než byl jinej hráč..takže jsem to chtěl zkusit podle toho..takže by se mi hodily nějaký konkretní možný problémy...

v KeyStateChange kontorluju pozici a auto kvuli tomu aby to vytvořilo raketu u automobilu hráče kterej střílí..v Timeru zas kontorluju jestli je object  v pozici u hráče..ale to se vubec nevyvolá

Edited by vladasavel
Link to comment
Share on other sites

  • 0

~> Jestli mluvíme o stejné proměnné, tak proč se v OnPlayerKey pracuje s raketa[playerid], a v pak RocketCheck zničí bazuka[playerid].

 

duvod je jednoduchy, protoze v onplayerkeystatechange se vytvori raketa do preomenne raketa[playerid], kdezto v MultiTimer() zkontroluje

if(waitshot[i] > 0)  //coz znamena, pokud jsi vystrelil raketu
for(new playerid=0; playerid<MAX_PLAYERS; playerid++)
                {
                    if(IsPlayerConnected(playerid) && IsPlayerInAnyVehicle(playerid))
                    {
                        if(i != playerid)
                        {
                            new Float:x, Float:y, Float:z; GetObjectPos(raketa[i],x,y,z);
                            if(IsPlayerInRangeOfPoint(playerid,12,x,y,z) && IsPlayerInAnyVehicle(playerid))
                            {

z tohoto scriptu lze usoudit ze kontroluje, zda raketa neni v dosahu pripojeneho hrace a pokud tak aby to nepocitalo tebe

 

tudiz pokud se splni tyhle vse podminky, tak se spusti script, ktery vymaze jak auto, tak i bazuku vytvorenou na aute (bazuka se vytvori po vytvoreni vozidla)

                                DestroyVehicle(GetPlayerVehicleID(playerid));
                                DestroyObject(bazuka[playerid]);
Link to comment
Share on other sites

  • 0
new FireShot[MAX_PLAYERS_EX];
new Rocket_T[2000];
public OnObjectMoved(objectid)
{

                    new
                                Float:x,
                                Float:y,
                                Float:z;
                    KillTimer(Rocket_T[objectid]);
                    GetObjectPos(objectid, x, y, z);
                    CreateExplosion(x, y, z, 11, 5.0);
                    DestroyObject(objectid);
                    return 1;
}
forward Rocket(objectid, playerid);
public Rocket(objectid, playerid)
{
   
    new Float:ax,Float:ay,Float:az,Float:aaz;
    GetObjectPos(objectid, ax, ay, az);
    MapAndreas_FindZ_For2DCoord(ax,ay,aaz);
    //MapAndreas_FindAverageZ(ax,ay,aaz); // pokud pouzijes verzi 1.2 muzes pouzit tuhle funkci a tu nad ni smazat
    if(az <= aaz) return CallLocalFunction("OnObjectMoved","i",objectid);
	foreach(new i : Player)
	{
	    if(!IsPlayerInAnyVehicle(i) || playerid == i) continue;
	    new vehicleid = GetPlayerVehicleID(i),Float:x,Float:y,Float:z;
	    GetVehiclePos(vehicleid, x, y, z);
	    new Float:za;
	    GetVehicleZAngle(vehicleid,za);
	    if(IsInRange(x, y, z,ax, ay, az,2.75))
		{
			PlayerInfo[playerid][pKills] ++;
			PlayerInfo[i][pDeaths] ++;
			PlayerInfo[playerid][xp] += GetVehicleTear(GetPVarInt(i,"active"))*50;
			return CallLocalFunction("OnObjectMoved","i",objectid);
		}
	}
	return 1;
}
public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
        if(IsPlayerInAnyVehicle(playerid) && FireShot[playerid] == 0 && newkeys & 4 )   // Only run the code if the object doesn't already exist, otherwise more objects will take up gRocketObj and the previous ones won't be deleted
        {
                new
                		vehicleid = GetPlayerVehicleID(playerid),
                        Float:x,
                        Float:y,
                        Float:z,
                        Float:r,
                        Float:dist = 300.0,
                        Float:tmpx,
                        Float:tmpy,
                        Float:tmpz,
						rocket;

                FireShot[playerid] = 1;
		        SetTimerEx("ShotFire", 2500, 0, "i", playerid);// timer na reload rakety
                GetVehiclePos(vehicleid, x, y, z);
	            GetVehicleZAngle(vehicleid, r);
               	rocket = CreateObject(345, x, y, z, 0, 0, r);
                GetXYZInfrontOfVehicle(vehicleid,dist,tmpx,tmpy,tmpz);
				Rocket_T[rocket] = SetTimerEx("Rocket", 25, 1, "ii",rocket,playerid);
       		    MoveObject(rocket,tmpx,tmpy,tmpz,80.0);                             // Nice and fast!
        }
}
stock GetXYZInfrontOfVehicle(vehid,Float:distance,&Float:x,&Float:y,&Float:z)
{
    new Float:Quaternion[4];
    new Float:transformationmatrix[4][4];

    GetVehicleRotationQuat(vehid, Quaternion[0], Quaternion[1], Quaternion[2], Quaternion[3]);

    new Float:xx = Quaternion[0] * Quaternion[0];
    new Float:xy = Quaternion[0] * Quaternion[1];
    new Float:xz = Quaternion[0] * Quaternion[2];
    new Float:xw = Quaternion[0] * Quaternion[3];
    new Float:yy = Quaternion[1] * Quaternion[1];
    new Float:yz = Quaternion[1] * Quaternion[2];
    new Float:yw = Quaternion[1] * Quaternion[3];
    new Float:zz = Quaternion[2] * Quaternion[2];
    new Float:zw = Quaternion[2] * Quaternion[3];

    transformationmatrix[0][0] = 1 - 2 * ( yy + zz );
    transformationmatrix[0][1] =     2 * ( xy - zw );
    transformationmatrix[0][2] =     2 * ( xz + yw );
    transformationmatrix[0][3] = 0.0;

    transformationmatrix[1][0] =     2 * ( xy + zw );
    transformationmatrix[1][1] = 1 - 2 * ( xx + zz );
    transformationmatrix[1][2] =     2 * ( yz - xw );
    transformationmatrix[1][3] = 0.0;

    transformationmatrix[2][0] =     2 * ( xz - yw );
    transformationmatrix[2][1] =     2 * ( yz + xw );
    transformationmatrix[2][2] = 1 - 2 * ( xx + yy );
    transformationmatrix[2][3] = 0;

    transformationmatrix[3][0] = 0;
    transformationmatrix[3][1] = 0;
    transformationmatrix[3][2] = 0;
    transformationmatrix[3][3] = 1;
    GetVehiclePos(vehid,x,y,z);
    z +=( -1 * transformationmatrix[0][1] + transformationmatrix[0][3])*distance;
    y +=( -1 * transformationmatrix[1][1] + transformationmatrix[1][3])*distance;
    x +=( -(-1 * transformationmatrix[2][1] + transformationmatrix[2][3]))*distance;
}
stock IsInRange(Float:x, Float:y, Float:z, Float:x2, Float:y2, Float:z2, Float:range)
{
	x2 -= x;
	y2 -= y;
	z2 -= z;
	return ((x2 * x2) + (y2 * y2) + (z2 * z2)) < (range * range);
}
forward ShotFire(playerid);
public ShotFire(playerid)
{
        FireShot[playerid] = 0;
        return 1;
}

takhle to je ve World of Battlecars.  Je to puvodne vytvoreny pomoci jednoho tutorialu ze samp fora, ale potom sem dohledal lepsi funkce na detekci presnyho smeru letu a predelal to. kdyby to hazelo nejaky chyby tak sem neco zapomnel postnout. tak to dystak dohledam.

urcite budes vedet co s tim delat :)  

 

edit: jo a malem bych zapomnel. pouziva to plugin MapAndreas ze samp fora :) script je psanej pro verzi 1.0 jelikoz mi synbian nahral pouze 1.0 :d ale je tam i komentovana funkce kdybys chtel pouzit verzi 1.2. tak staci lehoucce prehodit funkce.

Link to comment
Share on other sites

  • 0

WAU :) super díky moc :) Máš místo v /credits :d


Problem solved..Thanks Om3n téma zamykám a admini poprosím smazat téma abych nemusel poslouchat narážky že první help ohledně kodu od DaVeho..Děkuji :)

Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...