feskocheats
Умник
Всем здравствуйте, делать было нечего, а правильнее что хочу - то не выходит, решил потренироваться на стандартных инклудах.
И получилось что-то типо системы бонусов.
Суть ее в том:
Если вы взяли бонусный пикап, то вам дадут +1500$ и пикап исчезнет.
Пикапы можно создавать из игры командой /addbonus (только для RCON админов)
Запись/сохранение на инклуде file
Ну и собственно система:
А теперь поясню более "гадкие " моменты данной системы.
В этой строке содержится максимальное кол-во пикапов которые можно хранить в файле, в данном случае их 75
Данным циклом мы найдем все пикапы на сервере и при выключении мода/скрипта уничтожим все пикапы бонусов
Устанавливать данную систему можно как скриптом, так и в мод, во всех случаях работает одинаково.
И получилось что-то типо системы бонусов.
Суть ее в том:
Если вы взяли бонусный пикап, то вам дадут +1500$ и пикап исчезнет.
Пикапы можно создавать из игры командой /addbonus (только для RCON админов)
Запись/сохранение на инклуде file
Ну и собственно система:
PHP:
#include <a_samp>
#define mbs 75//максимум пикапов
main(){}
enum b
{
Float:coord[3],//коодринаты
pickup//pickup
};
new bns[mbs][b];//:D
new counter;//подсчет
public OnGameModeInit()
{
createbonus();//загоним все
return 1;
}
public OnGameModeExit()
{
for(new pi; pi<counter; pi++) DestroyPickup(bns[pi][pickup]);//убъем все
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if (strcmp("/addbonus", cmdtext, true, 9) == 0)
{
if(IsPlayerAdmin(playerid))//rcon
{
if(counter == mbs) return true;
new Float:pco[3],str[256];//coords,str
GetPlayerPos(playerid,pco[0],pco[1],pco[2]);//my pos
format(str,sizeof(str),"%0.f,%0.f,%0.f",pco[0],pco[1],pco[2]);//format
addbo(str);//write
for(new idq; idq<counter; idq++) bns[idq][pickup] = CreatePickup(1276, 2, pco[0],pco[1],pco[2]);//create
}
return 1;
}
return 0;
}
forward addbo(string[]);
public addbo(string[])
{
new entry[256];
format(entry, sizeof(entry), "%s\r\n",string);
new File:hFile;
hFile = fopen("Bonus.txt", io_append);
fwrite(hFile, entry);
fclose(hFile);
return 1;
}
forward createbonus();
public createbonus()
{
if(fexist("Bonus.txt"))//проверим на существование
{//если есть, то go
counted();
new Argument[3][90];
new entry[256];
new File: bnfile = fopen("Bonus.txt", io_read);//откроем его
if (bnfile)
{
for(new idq; idq<counter; idq++)
{//прогоним все по циклу
fread(bnfile, entry);//все прочтем
split(entry, Argument, ',');//знак отделение будет у нас ","
bns[idq][coord][0] = floatstr(Argument[0]);//коорда x
bns[idq][coord][1] = floatstr(Argument[1]);//коорда y
bns[idq][coord][2] = floatstr(Argument[2]);//коорда z
bns[idq][pickup] = CreatePickup(1276, 2, bns[idq][coord][0], bns[idq][coord][1], bns[idq][coord][2]);//ну и создаем все пикапы во всех мирах
}
fclose(bnfile);//закроем
print("----------------------------");
printf("Создано %d бонусов",counter);//доложим сколько создано
print("----------------------------");
}
}
}
stock counted()
{
new entry[256];
new File: bnfile = fopen("Bonus.txt", io_read);
while(fread(bnfile, entry, 256))
{
counter++;
}
fclose(bnfile);
}
public OnPlayerPickUpPickup(playerid, pickupid)
{
for(new pi; pi<counter; pi++)
{//прогоним по циклу
if(pickupid == bns[pi][pickup])
{//если наступил на этот пикап
GivePlayerMoney(playerid,1500);//дадим бабло
SendClientMessage(playerid,-1,"Вы подобрали бонус!");//сообщим
DestroyPickup(bns[pi][pickup]);//убъем
}
}
return 1;
}
stock split(const strsrc[], strdest[][], delimiter)
{
new i, li;
new aNum;
new len;
while(i <= strlen(strsrc)){
if(strsrc[i]==delimiter || i==strlen(strsrc)){
len = strmid(strdest[aNum], strsrc, li, i, 128);
strdest[aNum][len] = 0;
li = i+1;
aNum++;
}
i++;
}
return 1;
}
PHP:
#define mbs 75
PHP:
enum b
{
Float:coord[3],//здесь содержится все 3 координаты для пикапа.... (x.y.z)
pickup//а это нужно для воссоздания самого пикапа из файла
};
new bns[mbs][b];//ну это для массива
new counter;//эта переменная будет все пикапы на сервере
PHP:
for(new pi; pi<counter; pi++) DestroyPickup(bns[pi][pickup]);//убъем все
PHP:
if(IsPlayerAdmin(playerid))//проверим игрока на наличие RCON
{
if(counter == mbs) return true; //также просмотрим, если создаваемый пикап будет превышать максимум пикапов то в данной ситуации ничего не произойдет
new Float:pco[3],str[256];//создадим локальные переменные для обнаружения координат игрока и записи сообщения в файл
GetPlayerPos(playerid,pco[0],pco[1],pco[2]);//узнаем позицию игрока
format(str,sizeof(str),"%0.f,%0.f,%0.f",pco[0],pco[1],pco[2]);//и отформатируем координаты для записи данных в файл
addbo(str);//с этой функции мы запишим все данные в файл, подробнее будет описано ниже
for(new idq; idq<counter; idq++) bns[idq][pickup] = CreatePickup(1276, 2, pco[0],pco[1],pco[2]);//и при помощи цикла создаем новый пикап с бонусами
}
return 1;
}
PHP:
forward addbo(string[]);//этой функцией мы будем записывать данные в файл
public addbo(string[])
{
new entry[256];//переменная для формата
format(entry, sizeof(entry), "%s\r\n",string);//отформатируем данные которые были записаны
new File:hFile;//переменная для нашего файла
hFile = fopen("Bonus.txt", io_append);//откроем наш файл, в данном случае это Bonus.txt
fwrite(hFile, entry);//запишем в него наши координаты
fclose(hFile);//и закроем файл
return 1;
}
PHP:
stock counted()//этой функцией мы подсчитаем кол-во пикапов в файле
{
new entry[256];//опять же локал переменная для формата
new File: bnfile = fopen("Bonus.txt", io_read);//откроем наш файл
while(fread(bnfile, entry, 256))//прочтем в нем чтото
{
counter++;//и добавим к подсчету 1 значение
}
fclose(bnfile);//и на десерт закроем
}
PHP:
for(new pi; pi<counter; pi++)//проверим по циклу
{
if(pickupid == bns[pi][pickup])//если пикап оказался одним из бонусных
{
GivePlayerMoney(playerid,1500);//то дадим 1500 денег
SendClientMessage(playerid,-1,"Вы подобрали бонус!");//сообщим игроку что он подобрал наш бонус
DestroyPickup(bns[pi][pickup]);//и уничтожим пикап дабы не было повторного подбора
}
}
Автор: Seregamil
