Перейти к содержимому
  • Объявления

    • st1nc

      Жалобы на плохой пинг

      Жалобы принимаются по шаблону ниже в этой теме.   Город
      Провайдер
      Трассировка до серверов simhost.org
OptiKRuSSia

Система гонок_Тема забыта

  

18 пользователей проголосовало

  1. 1. Нужно это или нет?

    • Да
      14
    • Нет
      2


Рекомендованные сообщения

Создать систему гонок и добовлять трассы.

Пусть это будут спринты,кольцевые гонки и тд,это разнообразит возможности сервера. Входом пусть будет /race ид гонки

 

А то бывает вхдят многие новички и спрашивают где гонка и тд,а ждать мисс.гонку не всегда им охото,а ввести команду и погонять проще,что разнообразит сервер.

 

И для интереса предлогаю гонку внести в /level для кача,но этих гонок к примеру для очка надо выйграть 30,а то их можно часто запускать и качатся.

  • Like 2

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Хорошая идея.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я всегда ЗА возню, за гонки 8)

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

завалили вы SanSay работой)

ЗА!)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сделать выделенные трассы с объектами для каждой новой гонки, начинать если на ней больше 1 игрока. Победителю очки, которые потом превращаются в опыт.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сделать выделенные трассы с объектами для каждой новой гонки, начинать если на ней больше 1 игрока. Победителю очки, которые потом превращаются в опыт.

 

Естественно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В принципе есть /8track, но все равно такое можно замутить

Изменено пользователем Ови

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создать систему гонок и добовлять трассы.

Пусть это будут спринты,кольцевые гонки и тд,это разнообразит возможности сервера. Входом пусть будет /race ид гонки

тема не развита... как ты себе представляешь добавление гонки например?

 

более того... у нас Пен, а это значит, только 1 обычный маркер и 1 гоночный, следовательно - зашли ктонить на подобную гонку едут себе едут, а тут бац и начинается обычная миссионная гонка и ппц маркеры сбились... придется придумывать фигову тучу исключений для кого показывать маркеры для кого нет - очень сложно все учесть. После создания этого дела большая вероятность, что появится большое колво багов и пока откатаешь эту систему уйдет уйма времени... думаю "овчинка выделки не стоит"

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

тема не развита... как ты себе представляешь добавление гонки например?

 

более того... у нас Пен, а это значит, только 1 обычный маркер и 1 гоночный, следовательно - зашли ктонить на подобную гонку едут себе едут, а тут бац и начинается обычная миссионная гонка и ппц маркеры сбились... придется придумывать фигову тучу исключений для кого показывать маркеры для кого нет - очень сложно все учесть. После создания этого дела большая вероятность, что появится большое колво багов и пока откатаешь эту систему уйдет уйма времени... думаю "овчинка выделки не стоит"

 

Ну я себе это представляю,что гонки будут проходить в паралельном мире независимом от стандартного. к примеру захожу /race 1 она в паралельно мире,где до начала гонки отводится 1 мин,есле заходит меньше 2 то гонка не начинается. и так каждая гонка на определенном авто и на определенной карте.(треку)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

это хорошо, но я спрашиваю, немного другое... ты гришь "добовлять трассы" - каким образом?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

это хорошо, но я спрашиваю, немного другое... ты гришь "добовлять трассы" - каким образом?

 

Я эт имею ввиду создать систему гонок,ну и в ней там гонок 10 изначально,а потом можно в нее новые гонки добовлять со временем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну либо создавать отдельные трассы в мап едиторе, либо просто на обычной карте на каждую гонку делать чекпоинты.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ну собственно и кто будет трассы создавать?

 

DOMINATORant к тебе вопрос.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ну собственно и кто будет трассы создавать?

 

DOMINATORant к тебе вопрос.

 

Я просто предложил,а как реализовывать в плане скриптинга ята хз.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я просто предложил,а как реализовывать в плане скриптинга ята хз.

 

Тут вопрос в мапинге, а не в скриптинге. Надо находить или делать трассы в мап эдиторе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а зачем мап эдитор?

есть же встроенные возможности для создания...незнаю как на паблике (на озоне в свое время была такая возможность). также на модернотопии есть инструменты для создания. право на создание выдают администраторы одному человеку. или сами запиливают.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Речь идет о построении самих трасс, а не о сохранении чекпоинтов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

...

Реализация гонок не сложна, просто если сделаешь загрузку гонок из директории инклудов, а оттуда читаешь все файлы, где указан тип гонки, название, награда и т.д. Выложить 1 инклуд с комментариями, и я думаю народ сам наделает гонок, потом только сортируй :-)

Насчет реализации, тот тут и правда запарка, ее сложно будет решить.

2Flockaveli, изменения карты и гонка две разные вещи. А внутриигровое строительство объектов жутко жрет ресурсы сервера, да и это бредово.

Карты запилить можно в МТА редакторе и конвертировать. Наличие прямых рук обязательно :-D

Изменено пользователем CryDeS

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Реализация гонок не сложна... Выложить 1 инклуд с комментариями, и я думаю народ сам наделает гонок...

Насчет реализации, тот тут и правда запарка, ее сложно будет решить.

Ничего сложного, на вот FS

делай гонки:

 

#include <a_samp>

#include <float>

#include <file>

 

#define FILTERSCRIPT

#define MAX_RACECHECKPOINTS 64

 

#define COLOR_GREEN 0x33AA33AA

#define COLOR_RED 0xAA3333AA

#define COLOR_YELLOW 0xFFFF00AA

#define COLOR_WHITE 0xFFFFFFAA

 

forward RaceSound(playerid,sound);

forward BActiveCP(playerid,sele);

forward endrace();

forward countdown();

forward strtok(const string[],&index);

 

new Prize=15000; //Money for winning the race.

new Countdown; //Countdown timer

new cd; //Countdown time

new Ranking; //Finishing order for prizes

new RaceActive; //Is a race active?

new RaceStart; //Has race started?

new BCurrentCheckpoints[MAX_PLAYERS]; //Buildrace array pointers

new BSelectedCheckpoint[MAX_PLAYERS]; //Selected checkpoint during building

new RaceBuilders[MAX_PLAYERS]; //Who is building a race?

new Float:BRaceCheckpoints[MAX_PLAYERS][MAX_RACECHECKPOINTS][3]; //Buildrace CP array

new Float:RaceCheckpoints[MAX_RACECHECKPOINTS][3]; //Current race CP array

new LCurrentCheckpoint; //Current race array pointer

new CurrentCheckpoint[MAX_PLAYERS]; //Current race array pointer array :V

new RaceParticipant[MAX_PLAYERS]; //Has the player /joined the race

// \_values: 0 - not in race, 1 - joined, 2 - arrived to start CP, 3 - /ready locked, 4 - racing

new Participants; //Amount of participants

new PlayerVehicles[MAX_PLAYERS]; //For slapping the player back in their vehicle.

 

 

 

public OnFilterScriptInit()

{

print("\n----------------------------");

print("Teh race script v0.1 by Yagu");

print("----------------------------\n");

RaceActive=0;

Ranking=1;

LCurrentCheckpoint=0;

Participants=0;

return 1;

}

 

public OnFilterScriptExit()

{

return 1;

}

 

public OnPlayerCommandText(playerid, cmdtext[])

{

new idx;

new cmd[256];

cmd = strtok(cmdtext, idx);

 

// Racehelp - there's a lot of commands!

if (strcmp("/racehelp", cmdtext, true, 10) == 0)

{

SendClientMessage(playerid, COLOR_GREEN, "Yagu's race script racing help:");

SendClientMessage(playerid, COLOR_WHITE, "/loadrace [name] to load a track, /startrace to start it");

SendClientMessage(playerid, COLOR_WHITE, "/join to join the race, and /ready once at start to begin the race");

SendClientMessage(playerid, COLOR_WHITE, "once everyone has made themselves /ready as well. /leave to leave");

SendClientMessage(playerid, COLOR_WHITE, "the race, /endrace to end the race completely.");

SendClientMessage(playerid, COLOR_WHITE, "For info on building races, see /buildhelp");

return 1;

}

 

// Buildhelp - there's a lot of commands!

if (strcmp("/buildhelp", cmdtext, true, 10) == 0)

{

SendClientMessage(playerid, COLOR_GREEN, "Yagu's race script building help:");

SendClientMessage(playerid, COLOR_WHITE, "/buildrace to start a new track, /cp to place a checkpoint");

SendClientMessage(playerid, COLOR_WHITE, "/scp to choose an old checkpoint, /dcp to delete it, /mcp to move it.");

SendClientMessage(playerid, COLOR_WHITE, "/rcp to replace the current checkpoint, /editrace to load a race to editor.");

SendClientMessage(playerid, COLOR_WHITE, "/saverace [name] to save the race, and /clearrace to clear the race.");

SendClientMessage(playerid, COLOR_WHITE, "For info on racing itself, see /racehelp");

return 1;

}

 

 

// Buildrace - Start building a new race (suprising!)

if (strcmp("/buildrace", cmdtext, true, 10) == 0)

{

if(RaceBuilders[playerid] == 1)

{

SendClientMessage(playerid, COLOR_YELLOW, "You are already building a race, dork.");

}

else

{

SendClientMessage(playerid, COLOR_GREEN, "You are now building a race.");

RaceBuilders[playerid]=1;

BCurrentCheckpoints[playerid]=0;

}

return 1;

}

 

// cp - Add a checkpoint

if (strcmp("/cp", cmdtext, true, 10) == 0)

{

if(RaceBuilders[playerid] == 1 && BCurrentCheckpoints[playerid] < MAX_RACECHECKPOINTS)

{

new Float:x, Float:y, Float:z;

GetPlayerPos(playerid,x,y,z);

SetPlayerRaceCheckpoint(playerid,1,x,y,z,0.0,0.0,0.0,8.0);

new string[128];

format(string,128,"Checkpoint %d created: %f,%f,%f.",BCurrentCheckpoints[playerid],x,y,z);

SendClientMessage(playerid, COLOR_GREEN, string);

BRaceCheckpoints[playerid][bCurrentCheckpoints[playerid]][0]=x;

BRaceCheckpoints[playerid][bCurrentCheckpoints[playerid]][1]=y;

BRaceCheckpoints[playerid][bCurrentCheckpoints[playerid]][2]=z;

BSelectedCheckpoint[playerid]=BCurrentCheckpoints[playerid];

BCurrentCheckpoints[playerid]++;

}

else if(RaceBuilders[playerid] == 1 && BCurrentCheckpoints[playerid] == MAX_RACECHECKPOINTS)

{

new string[128];

format(string,128,"Sorry, maximum amount of checkpoints reached (%d).",MAX_RACECHECKPOINTS);

SendClientMessage(playerid, COLOR_YELLOW, string);

}

else

{

SendClientMessage(playerid, COLOR_RED, "You are not building a race!");

}

return 1;

}

// scp - Select a checkpoint

if (strcmp("/scp", cmd, true, 10) == 0)

{

new sele;

new tmp[256];

tmp = strtok(cmdtext, idx);

 

if(!strlen(tmp)) {

SendClientMessage(playerid, COLOR_WHITE, "USAGE: /scp [checkpoint]");

return 1;

}

sele = strval(tmp);

if(RaceBuilders[playerid] == 1)

{

if(sele>BCurrentCheckpoints[playerid]-1 || BCurrentCheckpoints[playerid] < 1 || sele < 0)

{

SendClientMessage(playerid, COLOR_YELLOW, "Invalid checkpoint!");

return 1;

}

new string[128];

format(string,128,"Selected checkpoint %d.",sele);

SendClientMessage(playerid, COLOR_GREEN, string);

BActiveCP(playerid,sele);

BSelectedCheckpoint[playerid]=sele;

}

else

{

SendClientMessage(playerid, COLOR_RED, "You are not building a race!");

}

return 1;

}

 

// rcp - Replace the current checkpoint with a newone

if (strcmp("/rcp", cmd, true, 10) == 0)

{

if(RaceBuilders[playerid] != 1)

{

SendClientMessage(playerid, COLOR_RED, "You are not building a race!");

return 1;

}

else if(BCurrentCheckpoints[playerid] < 1)

{

SendClientMessage(playerid, COLOR_YELLOW, "No checkpoint to replace!");

return 1;

}

new Float:x,Float:y,Float:z;

GetPlayerPos(playerid,x,y,z);

SetPlayerRaceCheckpoint(playerid,1,x,y,z,0.0,0.0,0.0,8.0);

new string[128];

format(string,128,"Checkpoint %d replaced: %f,%f,%f.",BSelectedCheckpoint[playerid],x,y,z);

SendClientMessage(playerid, COLOR_GREEN, string);

BRaceCheckpoints[playerid][bSelectedCheckpoint[playerid]][0]=x;

BRaceCheckpoints[playerid][bSelectedCheckpoint[playerid]][1]=y;

BRaceCheckpoints[playerid][bSelectedCheckpoint[playerid]][2]=z;

BActiveCP(playerid,BSelectedCheckpoint[playerid]);

return 1;

}

 

// mcp - Move the selected checkpoint

if (strcmp("/mcp", cmd, true, 10) == 0)

{

if(RaceBuilders[playerid] != 1)

{

SendClientMessage(playerid, COLOR_RED, "You are not building a race!");

return 1;

}

else if(BCurrentCheckpoints[playerid] < 1)

{

SendClientMessage(playerid, COLOR_YELLOW, "No checkpoint to move!");

return 1;

}

new tmp[256];

tmp = strtok(cmdtext, idx);

if(!strlen(tmp)) {

SendClientMessage(playerid, COLOR_WHITE, "USAGE: /mcp [x,y or z] [amount]");

return 1;

}

new direction;

if(tmp[0] == 'x') { direction=0; }

else if (tmp[0] == 'y') { direction=1; }

else if (tmp[0] == 'z') { direction=2; }

else { SendClientMessage(playerid, COLOR_WHITE, "USAGE: /mcp [x,y or z] [amount]"); return 1; }

tmp = strtok(cmdtext, idx);

if(!strlen(tmp)) {

SendClientMessage(playerid, COLOR_WHITE, "USAGE: /mcp [x,y or z] [amount]");

return 1;

}

new Float:amount;

amount=floatstr(tmp);

if(amount == 0.0)

{

SendClientMessage(playerid, COLOR_WHITE, "USAGE: /mcp [x,y or z] [amount]");

return 1;

}

BRaceCheckpoints[playerid][bSelectedCheckpoint[playerid]][direction]=BRaceCheckpoints[playerid][bSelectedCheckpoint[playerid]][direction]+amount;

BActiveCP(playerid,BSelectedCheckpoint[playerid]);

return 1;

}

// dcp - Delete the selected waypoint

if (strcmp("/dcp", cmd, true, 10) == 0)

{

if(RaceBuilders[playerid] != 1)

{

SendClientMessage(playerid, COLOR_RED, "You are not building a race!");

return 1;

}

else if(BCurrentCheckpoints[playerid] < 1)

{

SendClientMessage(playerid, COLOR_YELLOW, "No checkpoint to delete!");

return 1;

}

for(new i=BSelectedCheckpoint[playerid];i<BCurrentCheckpoints[playerid];i++)

{

BRaceCheckpoints[playerid][0]=BRaceCheckpoints[playerid][i+1][0];

BRaceCheckpoints[playerid][1]=BRaceCheckpoints[playerid][i+1][1];

BRaceCheckpoints[playerid][2]=BRaceCheckpoints[playerid][i+1][2];

}

BCurrentCheckpoints[playerid]--;

BSelectedCheckpoint[playerid]--;

if(BCurrentCheckpoints[playerid] < 1)

{

DisablePlayerRaceCheckpoint(playerid);

BSelectedCheckpoint[playerid]=0;

return 1;

}

else if(BSelectedCheckpoint[playerid] < 0)

{

BSelectedCheckpoint[playerid]=0;

}

BActiveCP(playerid,BSelectedCheckpoint[playerid]);

return 1;

}

// clearrace - Clear the current (new) race.

if (strcmp("/clearrace", cmd, true, 10) == 0)

{

if(RaceBuilders[playerid] == 1)

{

RaceBuilders[playerid]=0;

for(new i=0;i<BCurrentCheckpoints[playerid];i++)

{

BRaceCheckpoints[playerid][0]=0.0;

BRaceCheckpoints[playerid][1]=0.0;

BRaceCheckpoints[playerid][2]=0.0;

}

BCurrentCheckpoints[playerid]=0;

DisablePlayerRaceCheckpoint(playerid);

SendClientMessage(playerid, COLOR_GREEN, "Your race has been cleared! Use /buildrace to start a new one.");

}

else

{

SendClientMessage(playerid, COLOR_RED, "You are not building a race!");

}

return 1;

}

// editrace - Load an existing race into the builder

if (strcmp("/editrace", cmd, true, 10) == 0)

{

if(RaceBuilders[playerid] != 1)

{

SendClientMessage(playerid, COLOR_RED, "You are not building a race!");

return 1;

}

if(BCurrentCheckpoints[playerid]>0) //Clear the old race if there is such.

{

for(new i=0;i<BCurrentCheckpoints[playerid];i++)

{

BRaceCheckpoints[playerid][0]=0.0;

BRaceCheckpoints[playerid][1]=0.0;

BRaceCheckpoints[playerid][2]=0.0;

}

BCurrentCheckpoints[playerid]=0;

}

new tmp[256];

tmp = strtok(cmdtext, idx);

if(!strlen(tmp))

{

SendClientMessage(playerid, COLOR_WHITE, "USAGE: /editrace [name]");

return 1;

}

new race_name[32],templine[42];

format(race_name,sizeof(race_name), "%s.yr",tmp);

if(!fexist(race_name))

{

new string[64];

format(string,sizeof(string), "The race \"%s\" doesn't exist.",tmp);

SendClientMessage(playerid, COLOR_RED, string);

return 1;

}

BCurrentCheckpoints[playerid]=-1;

new File:f;

f = fopen(race_name, io_read);

new string[128];

while(fread(f,templine,sizeof(templine),false))

{

BCurrentCheckpoints[playerid]++;

new i;

BRaceCheckpoints[playerid][bCurrentCheckpoints[playerid]][0] = floatstr(strtok(templine,i));

BRaceCheckpoints[playerid][bCurrentCheckpoints[playerid]][1] = floatstr(strtok(templine,i));

BRaceCheckpoints[playerid][bCurrentCheckpoints[playerid]][2] = floatstr(strtok(templine,i));

}

fclose(f);

BCurrentCheckpoints[playerid]++; // # of next CP to be created

format(string,128,"Race \"%s\" has been loaded for editing. (%d checkpoints)",tmp,BCurrentCheckpoints[playerid]);

SendClientMessage(playerid, COLOR_GREEN, string);

return 1;

}

 

// saverace - Save the current checkpoints to a file

if (strcmp("/saverace", cmd, true, 10) == 0)

{

if(RaceBuilders[playerid] == 1)

{

new tmp[256];

tmp = strtok(cmdtext, idx);

if(!strlen(tmp))

{

SendClientMessage(playerid, COLOR_WHITE, "USAGE: /saverace [name]");

return 1;

}

if(BCurrentCheckpoints[playerid] < 2)

{

SendClientMessage(playerid, COLOR_YELLOW, "You need atleast 2 checkpoints to save!");

return 1;

}

new race_name[32],templine[42];

format(race_name, 32, "%s.yr",tmp);

if(fexist(race_name))

{

new string[64];

format(string,sizeof(string), "Race \"%s\" already exists.",tmp);

SendClientMessage(playerid, COLOR_RED, string);

return 1;

}

new File:f,Float:x,Float:y,Float:z;

f = fopen(race_name,io_write);

for(new i = 0; i < BCurrentCheckpoints[playerid];i++)

{

x=BRaceCheckpoints[playerid][0];

y=BRaceCheckpoints[playerid][1];

z=BRaceCheckpoints[playerid][2];

format(templine,sizeof(templine),"%f %f %f\n",x,y,z);

fwrite(f,templine);

}

fclose(f);

new string[128];

format(string,128,"Your race \"%s\" has been saved.",tmp);

SendClientMessage(playerid, COLOR_GREEN, string);

}

else

{

SendClientMessage(playerid, COLOR_RED, "You are not building a race!");

}

return 1;

}

 

// loadrace - Load a race from file

if (strcmp("/loadrace", cmd, true, 10) == 0)

{

new tmp[256];

tmp = strtok(cmdtext, idx);

if(!strlen(tmp))

{

SendClientMessage(playerid, COLOR_WHITE, "USAGE: /loadrace [name]");

return 1;

}

if(RaceActive == 1)

{

SendClientMessage(playerid, COLOR_RED, "A race is already active!");

return 1;

}

new race_name[32],templine[42];

format(race_name,sizeof(race_name), "%s.yr",tmp);

if(!fexist(race_name))

{

new string[64];

format(string,sizeof(string), "The race \"%s\" doesn't exist.",tmp);

SendClientMessage(playerid, COLOR_RED, string);

return 1;

}

if(fexist(race_name))

{

LCurrentCheckpoint=-1;

new File:f;

f = fopen(race_name, io_read);

new string[128];

while(fread(f,templine,sizeof(templine),false)) {

LCurrentCheckpoint++;

new i;

RaceCheckpoints[LCurrentCheckpoint][0] = floatstr(strtok(templine,i));

RaceCheckpoints[LCurrentCheckpoint][1] = floatstr(strtok(templine,i));

RaceCheckpoints[LCurrentCheckpoint][2] = floatstr(strtok(templine,i));

//format(string,128,"CP %d: %f %f %f added",LCurrentCheckpoint,RaceCheckpoints[LCurrentCheckpoint][0],RaceCheckpoints[LCurrentCheckpoint][1],RaceCheckpoints[LCurrentCheckpoint][2]);

//SendClientMessage(playerid, COLOR_YELLOW, string); //debug stuff

}

fclose(f);

format(string,128,"Race \"%s\" has been loaded.",tmp);

SendClientMessage(playerid, COLOR_GREEN, string);

}

return 1;

}

 

// startrace - Announce the race, start the CP timer, initialize few values.

if (strcmp("/startrace", cmdtext, true, 10) == 0)

{

if(RaceActive == 1)

{

SendClientMessage(playerid, COLOR_RED, "A race is already active!");

return 1;

}

if(LCurrentCheckpoint<1)

{

SendClientMessage(playerid, COLOR_YELLOW, "No race loaded.");

return 1;

}

SendClientMessageToAll(COLOR_GREEN,"A race is about to start, type /join to join!");

RaceStart=0;

RaceActive=1;

Ranking=1;

return 1;

}

 

// join - Join the announced race.

if (strcmp("/join", cmdtext, true, 10) == 0)

{

if(RaceBuilders[playerid] == 1)

{

SendClientMessage(playerid, COLOR_YELLOW, "You are currently building a race, can't join.");

return 1;

}

if(RaceParticipant[playerid]>0)

{

SendClientMessage(playerid, COLOR_YELLOW, "You've already joined the race!");

}

else if(RaceActive==1 && RaceStart==0)

{

new Float:x,Float:y,Float:z,Float:nx,Float:ny,Float:nz;

CurrentCheckpoint[playerid]=0;

x=RaceCheckpoints[0][0]; y=RaceCheckpoints[0][1]; z=RaceCheckpoints[0][2];

nx=RaceCheckpoints[1][0]; ny=RaceCheckpoints[1][1]; nz=RaceCheckpoints[1][2];

SetPlayerRaceCheckpoint(playerid,0,x,y,z,nx,ny,nz,8.0);

RaceParticipant[playerid]=1;

SendClientMessage(playerid, COLOR_GREEN, "You have joined the race, go to the start!");

Participants++;

}

else if(RaceActive==1 && RaceStart==1)

{

SendClientMessage(playerid, COLOR_YELLOW, "The race has already started, can't join.");

}

else

{

SendClientMessage(playerid, COLOR_YELLOW, "There is no race you can join.");

}

return 1;

}

// leave - leave the current race.

if (strcmp("/leave", cmdtext, true, 10) == 0)

{

if(RaceParticipant[playerid] > 0)

{

if(RaceParticipant[playerid]==3) //Player was still /ready-locked, unlocking.

{

TogglePlayerControllable(playerid,1);

if(PlayerVehicles[playerid] != 0)

{

PutPlayerInVehicle(playerid,PlayerVehicles[playerid],0);

PlayerVehicles[playerid]=0;

}

}

DisablePlayerRaceCheckpoint(playerid);

RaceParticipant[playerid]=0;

Participants--;

SendClientMessage(playerid,COLOR_YELLOW,"You have left the race.");

if(Participants == 0)

{

endrace();

}

}

else

{

SendClientMessage(playerid, COLOR_YELLOW, "You aren't in a race.");

}

return 1;

}

// endrace - Complete the current race, clear tables & variables, stop the timer.

if (strcmp("/endrace", cmdtext, true, 10) == 0)

{

if(RaceActive==0)

{

SendClientMessage(playerid, COLOR_YELLOW, "There is no race active.");

return 1;

}

endrace();

return 1;

}

// ready - Player is ready to start, lock the controls, prepare for CD.

if (strcmp("/ready", cmdtext, true, 10) == 0)

{

if(RaceParticipant[playerid]==2 && IsPlayerInRaceCheckpoint(playerid))

{

SendClientMessage(playerid,COLOR_GREEN,"You are now ready. Type /ready again to cancel.");

TogglePlayerControllable(playerid,0);

if(IsPlayerInAnyVehicle(playerid))

{

PlayerVehicles[playerid]=GetPlayerVehicleID(playerid);

}

else

{

PlayerVehicles[playerid]=0;

}

RaceParticipant[playerid]=3;

}

else if (RaceParticipant[playerid]==3)

{

SendClientMessage(playerid,COLOR_YELLOW,"You are now not ready. Type /ready when you are.");

TogglePlayerControllable(playerid,1);

RaceParticipant[playerid]=2;

if(PlayerVehicles[playerid] != 0)

{

PutPlayerInVehicle(playerid,PlayerVehicles[playerid],0);

PlayerVehicles[playerid]=0;

}

}

else

{

SendClientMessage(playerid,COLOR_YELLOW,"You have not participated in a race.");

}

new Waiting=0;

for(new i=0;i<MAX_PLAYERS;i++)

{

if(RaceParticipant == 1 || RaceParticipant == 2)

{

Waiting++;

}

}

 

if(Waiting==0)

{

SendClientMessageToAll(COLOR_GREEN,"Everyone is ready, the race begins!");

cd=5;

Countdown = SetTimer("countdown",1000,1);

}

return 1;

}

return 0;

}

 

strtok(const string[], &index)

{

new length = strlen(string);

while ((index < length) && (string[index] <= ' '))

{

index++;

}

 

new offset = index;

new result[20];

while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))

{

result[index - offset] = string[index];

index++;

}

result[index - offset] = EOS;

return result;

}

 

public countdown() {

RaceStart=1;

if(cd>0)

{

new string[32];

format(string, 32, "%d...",cd);

for(new i=0;i<MAX_PLAYERS;i++)

{

if(RaceParticipant>1)

{

RaceSound(i,1056);

GameTextForPlayer(i,string,1000,3);

}

}

}

else if(cd == 0)

{

new string[32];

format(string, 32, "GO!",cd);

KillTimer(Countdown);

for(new i=0;i<MAX_PLAYERS;i++)

{

if(RaceParticipant>1)

{

RaceSound(i,1057);

GameTextForPlayer(i,string,3000,3);

TogglePlayerControllable(i,1);

RaceParticipant=4;

if(PlayerVehicles != 0)

{

PutPlayerInVehicle(i,PlayerVehicles,0);

PlayerVehicles=0;

}

 

new Float:x,Float:y,Float:z,Float:nx,Float:ny,Float:nz;

CurrentCheckpoint++;

x=RaceCheckpoints[CurrentCheckpoint][0];

y=RaceCheckpoints[CurrentCheckpoint][1];

z=RaceCheckpoints[CurrentCheckpoint][2];

if(CurrentCheckpoint == LCurrentCheckpoint)

{

SetPlayerRaceCheckpoint(i,1,x,y,z,0.0,0.0,0.0,8.0);

}

else

{

nx=RaceCheckpoints[CurrentCheckpoint+1][0];

ny=RaceCheckpoints[CurrentCheckpoint+1][1];

nz=RaceCheckpoints[CurrentCheckpoint+1][2];

SetPlayerRaceCheckpoint(i,0,x,y,z,nx,ny,nz,8.0);

}

}

}

}

cd--;

}

 

public OnPlayerEnterRaceCheckpoint(playerid)

{

new i;

i=playerid;

if(RaceParticipant>=1)

{

if(CurrentCheckpoint == LCurrentCheckpoint)

{

new string[128], name[MAX_PLAYER_NAME];

GetPlayerName(i, name, MAX_PLAYER_NAME);

RaceParticipant=0;

RaceSound(playerid,1139);

format(string,128,"%s has finished the race, position: %d",name,Ranking);

SendClientMessageToAll(COLOR_GREEN,string);

if(Ranking<4)

{

GivePlayerMoney(i,Prize/Ranking);

format(string,128,"You have earned $%d from the race!",Prize/Ranking);

SendClientMessage(i,COLOR_GREEN,string);

}

Ranking++;

Participants--;

DisablePlayerRaceCheckpoint(i);

if(Participants == 0)

{

endrace();

}

}

else if (CurrentCheckpoint==0 && RaceStart == 0 && RaceParticipant==1)

{

SendClientMessage(i,COLOR_YELLOW,"Type /ready when you are ready to start.");

SendClientMessage(i,COLOR_YELLOW,"NOTE: Your controls will be locked.");

RaceParticipant=2;

}

else if (RaceStart==1)

{

new Float:x,Float:y,Float:z,Float:nx,Float:ny,Float:nz;

RaceSound(i,1138);

CurrentCheckpoint++;

x=RaceCheckpoints[CurrentCheckpoint][0];

y=RaceCheckpoints[CurrentCheckpoint][1];

z=RaceCheckpoints[CurrentCheckpoint][2];

if(CurrentCheckpoint == LCurrentCheckpoint)

{

SetPlayerRaceCheckpoint(i,1,x,y,z,0.0,0.0,0.0,8.0);

}

else

{

nx=RaceCheckpoints[CurrentCheckpoint+1][0];

ny=RaceCheckpoints[CurrentCheckpoint+1][1];

nz=RaceCheckpoints[CurrentCheckpoint+1][2];

SetPlayerRaceCheckpoint(i,0,x,y,z,nx,ny,nz,8.0);

}

}

}

}

 

public endrace()

{

for(new i=0;i<LCurrentCheckpoint;i++)

{

RaceCheckpoints[0]=0.0;

RaceCheckpoints[1]=0.0;

RaceCheckpoints[2]=0.0;

}

LCurrentCheckpoint=0;

for(new i=0;i<MAX_PLAYERS;i++)

{

DisablePlayerRaceCheckpoint(i);

if(RaceParticipant==3) //Player was still /ready-locked, unlocking.

{

TogglePlayerControllable(i,1);

if(PlayerVehicles != 0)

{

PutPlayerInVehicle(i,PlayerVehicles,0);

PlayerVehicles=0;

}

}

RaceParticipant=0;

}

RaceActive=0;

RaceStart=0;

SendClientMessageToAll(COLOR_YELLOW, "The current race has been finished.");

}

 

public BActiveCP(playerid,sele)

{

new Float:x,Float:y,Float:z, Float:nx, Float:ny, Float:nz;

if(BCurrentCheckpoints[playerid]-1 == sele)

{

x=BRaceCheckpoints[playerid][sele][0];

y=BRaceCheckpoints[playerid][sele][1];

z=BRaceCheckpoints[playerid][sele][2];

SetPlayerRaceCheckpoint(playerid,1,x,y,z,0.0,0.0,0.0,8.0);

}

else

{

x=BRaceCheckpoints[playerid][sele][0];

y=BRaceCheckpoints[playerid][sele][1];

z=BRaceCheckpoints[playerid][sele][2];

nx=BRaceCheckpoints[playerid][sele+1][0];

ny=BRaceCheckpoints[playerid][sele+1][1];

nz=BRaceCheckpoints[playerid][sele+1][2];

SetPlayerRaceCheckpoint(playerid,0,x,y,z,nx,ny,nz,8.0);

}

}

 

public RaceSound(playerid,sound)

{

new Float:x,Float:y,Float:z;

GetPlayerPos(playerid,x,y,z);

PlayerPlaySound(playerid,sound,x,y,z);

 

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создать систему гонок и добовлять трассы.

Пусть это будут спринты,кольцевые гонки и тд,это разнообразит возможности сервера. Входом пусть будет /race ид гонки

 

А то бывает вхдят многие новички и спрашивают где гонка и тд,а ждать мисс.гонку не всегда им охото,а ввести команду и погонять проще,что разнообразит сервер.

 

И для интереса предлогаю гонку внести в /level для кача,но этих гонок к примеру для очка надо выйграть 30,а то их можно часто запускать и качатся.

Да,за,но знаешь чо ещё можно,сменить места миссионной гонки,если это возможно,а то старые уже не интересны)нужны новые,если это возможно)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

мое мнение: создавать чето подобное обычным гонкам - бред

уж вносите тупо предложение обновить существующие, да и все, а то велосипед чето тут изобретаете.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

мое мнение: создавать чето подобное обычным гонкам - бред

уж вносите тупо предложение обновить существующие, да и все, а то велосипед чето тут изобретаете.

Вношу - куда тебе насыпать около 150-ти пеновских гонок? Чего-то как и было от денвера, чего-то от меня...

 

p.s.

только не поедут они на те гонки, да и не успеют доехать, потому как по всему штату, а между мисками всего 6 минут

p.p.s.

а новые гонки в LS уже и тулить некуда!

Изменено пользователем Tron

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Tron, к сведению гонки делаются не в FS.

Предложение тогда добавить тип гонок, там круговая, спринт и т.д. И за разные типы давать разные награды.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Tron, к сведению гонки делаются не в FS.

Предложение тогда добавить тип гонок, там круговая, спринт и т.д. И за разные типы давать разные награды.

Ты ещё и сансая поучи! К сведению - не учи дядь делать! Особенно тех, которые с 2006 года это делают... Если ты про ТОТ фс то там не пеновские гонки, там до 64-х маркеров на гонку построить можно, включая воздушные (если мне с кем-то не изменяет моя память). А если про пост чуть выше то там написано LS,а не FS! И таки в Los Santos`е гонки тулить уже некуда, их там и так около 50-ти!

 

справка:

LS - Los Santos - первый город

SF - San Fierro - второй город

LV - Las Venturas - третий город

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

про гонки... я имел ввиду обновление существующих гонок и ессно они должны быть только в ЛС... т.е. старые убираем, новые ставим. Суть же в том, что приелись старые трассы - вот и выход из положения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Гость
Эта тема закрыта для публикации сообщений.

×