Доступ к готовым решениям

Переход в группу "Пользователь"

300.00
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info
  • Новые темы в этом разделе публикуются автоматически при добавлении файла в менеджер ресурсов.
    Ручное создание новых тем невозможно.

Сферические фейерверки

OKStyle

Адвокат по делам семейным
Administrator
Wiki Team
Регистрация
4 Мар 2011
Сообщения
7,094
Лучшие ответы
226
Репутация
2,455
Награды
11

Несколько дней назад автор искал хорошую систему фейерверков, но не смог найти. Поэтому он задумал сделать свою. И вот она - представляет на ваш суд. Игрок должен установить пиротехнические коробки с помощью команды (/placefirework), а затем набрать команду (/startfirework) для запуска салюта. Добавляем на сервер, пока ещё не поздно ??

Команды:
1) /placefirework [Height] [Radius] [Amount]
2) /startfirework [ID]
3) /changetime [Time] (Between 1-6 effects comes out best way)

PHP:
//Firework system for making sphere | By: CodeStyle175
//Firework effects comes out when time is between 1-6. (/changetime)
//You can change this script, but you have to KEEP CREDITS...

#include <a_samp>
#include <zcmd>
#include <sscanf2>

#define RED 0xF3400CFF
#define SCM SendClientMessage

#define MAX_FIREWORK 100 //You can change it...
#define NON -1

#define function%0(%1) forward%0(%1); public%0(%1)

enum EnumFirework
{
    FW_Owner,
    Float:FW_Pos[4],
    Float:FW_Height,
    Float:FW_Radius,
    FW_Amount,
    FW_RocketsReleased,
    FW_Timer,
    FW_Box
};
new FireworkInfo[MAX_FIREWORK][EnumFirework];

public OnFilterScriptInit(){
        for(new i; i < MAX_FIREWORK; i++) FireworkInfo[i][FW_Owner]=NON;
    printf("Firework system by: CodeStyle175");
    return 1;
}
public OnFilterScriptExit(){
    return 1;
}

function EmptyFireworkSlot()
{
    for(new i=1; i < MAX_FIREWORK; i++)if(FireworkInfo[i][FW_Owner]==NON) return i;
    return 0;
}

CMD:placefirework(playerid,params[])
{
    new Float:height,Float:radius,amount,string[60];
    if(sscanf(params,"ffd",height,radius,amount))return SCM(playerid,-1,"USAGE: /placefirework [Height] [Radius] [Amount]");
    new eid=EmptyFireworkSlot();
    if(!eid)return SCM(playerid,RED,"There are no more free firework slots!");
    GetPlayerPos(playerid,FireworkInfo[eid][FW_Pos][0],FireworkInfo[eid][FW_Pos][1],FireworkInfo[eid][FW_Pos][2]);
    GetPlayerFacingAngle(playerid,FireworkInfo[eid][FW_Pos][3]);
    //Enum info settimine
    FireworkInfo[eid][FW_RocketsReleased]=-2;
    FireworkInfo[eid][FW_Radius]=radius;
    FireworkInfo[eid][FW_Height]=height;
    FireworkInfo[eid][FW_Owner]=playerid;
    FireworkInfo[eid][FW_Amount]=amount;
    FireworkInfo[eid][FW_Pos][0]+= (2.0 * floatsin(-FireworkInfo[eid][FW_Pos][3],degrees));
    FireworkInfo[eid][FW_Pos][1]+= (2.0 * floatcos(-FireworkInfo[eid][FW_Pos][3],degrees));
    FireworkInfo[eid][FW_Pos][2]-=0.9;
    FireworkInfo[eid][FW_Box]=CreateObject(3016,FireworkInfo[eid][FW_Pos][0],FireworkInfo[eid][FW_Pos][1],FireworkInfo[eid][FW_Pos][2], 0,0,0);
    format(string,sizeof(string),"Firework box ID: %d",eid);
    SCM(playerid,-1,string);
    return 1;
}
CMD:startfirework(playerid,params[])
{
    new eid;
    if(sscanf(params,"d",eid))return SCM(playerid,-1,"USAGE: /startfirwork [ID]");
    if(FireworkInfo[eid][FW_Owner]!=playerid)return SCM(playerid,RED,"You can't light up this firework!");
    FireworkInfo[eid][FW_Timer]=SetTimerEx("StartFirework",600,true,"d",eid);
    return 1;
}
CMD:changetime(playerid,params[])
{
    new time;
    if(sscanf(params,"d",time))return SCM(playerid,-1,"USAGE: /changetime [Time]");
    SetWorldTime(time);
    SCM(playerid,-1,"You changed world time.");
    return 1;
}

function StartFirework(eid)
{
        FireworkInfo[eid][FW_Amount]--;
    new Float:distance,Float:Ax,Float:Ay,Float:Az,time,object;

        if(!FireworkInfo[eid][FW_Amount]){
        if(IsPlayerConnected(FireworkInfo[eid][FW_Owner]))SCM(FireworkInfo[eid][FW_Owner],-1,"Firework stopped has stopped!");
        FireworkInfo[eid][FW_Owner]=NON;
        DestroyObject(FireworkInfo[eid][FW_Box]);
        KillTimer(FireworkInfo[eid][FW_Timer]);
        return 1;
    }
    new Float:dis=10.0*FireworkInfo[eid][FW_RocketsReleased];
    if(++FireworkInfo[eid][FW_RocketsReleased]==3)FireworkInfo[eid][FW_RocketsReleased]=-2;
    //Counting
    Ax=FireworkInfo[eid][FW_Pos][0]+(distance * floatsin(-FireworkInfo[eid][FW_Pos][3],degrees));
    Ay=FireworkInfo[eid][FW_Pos][1]+(distance * floatsin(-FireworkInfo[eid][FW_Pos][3],degrees));
    Az=FireworkInfo[eid][FW_Pos][2]+FireworkInfo[eid][FW_Height];
    //Rocket body moving
    object=CreateObject(3000,FireworkInfo[eid][FW_Pos][0],FireworkInfo[eid][FW_Pos][1],FireworkInfo[eid][FW_Pos][2],0,0,0);
    time=MoveObject(object, Ax,Ay,Az, 20.0);
        SetTimerEx("MakeSphere",time,false,"dffff",object,Ax,Ay,Az,FireworkInfo[eid][FW_Radius]);
    return 1;
}
function MakeSphere(nobject,Float:x,Float:y,Float:z,Float:radius)
{
        DestroyObject(nobject);
    new object,type[3]={19282,19283,19284};
    new Float:phi=0.0,Float:theta=0.0,time;
    new Float:Ax=0.0,Float:Ay=0.0,Float:Az=0.0;
        CreateExplosion(x,y,z, 12,10.0);
    for(new i; i < 26; i++){ // 1 8 8 8 1
        Ax=x+(radius*floatsin(-phi,degrees)*floatcos(-theta,degrees));
        Ay=y+(radius*floatsin(-phi,degrees)*floatsin(-theta,degrees));
        Az=z+(radius*floatcos(-phi,degrees));
        //Object moveing
        object=CreateObject(type[random(3)],x,y,z,0.0,0.0,theta+45);//Start
        time=MoveObject(object, Ax,Ay,Az, 5.0);
            SetTimerEx("FireworkRocketEnd",time,false,"d",object);//End
        //Reset
        theta+=45.0; if(theta==360.0){ Ax=0.0; Ax=0.0; Ay=0.0;}
            if((1+i)%8==1)phi+=45;
        }
    return 1;
}
function FireworkRocketEnd(object)return DestroyObject(object);
Автор: CodeStyle175
 
Последнее редактирование:
Сверху Снизу