PDA

Просмотр полной версии : [FS] PawnoWoker v0.1 от Тузика | Разработка



Тузик
28.07.2016, 15:05
Пишу сразу, прошу не удалять тему, а лучше вообще закрыть))
Здесь будет дневник введения об обновлении FS.

Сама его суть (возможно не все выполню :D Но это моя мечта и мой план):
1) Создание фракционного транспорта.
1.1) Нет возможности в него сесть, если игрок не находится в этой фракции.
1.2) Есть возможность установки сирены.
1.3) Есть возможность завести/заглушить двигатель или фары, если игрок имеет ключи (Ключ = фракции).
2) Создание точки появления (spawn).
3) Создание пикапов
3.1) Создание пикапа с точкой телепортации (с самого пикапа в другое место (не второй пикап))
3.2) Создание пикапа с выдачей оружия/здоровья/брони... (можете предлагать что добавить, кроме объектов (насчет денег - думаю массив Info[playerid][cMoney] сами добавите))

(Не буду делать диалоговое, сами напишите :3)

Обновление 28.07:

Сделал сохранение позиций: игрока, транспорта, пикапа с телепортом, пикапа с выдачей.
Сделал функцию получения идентификатора :3 (Это было убийство, то 0,10,20, то 0,5,15. Теперь 0,1,2,3 :*)

Обновление 29.07: Сделал выгрузку транспорта на сервер.

new.pwn (Яндекс Диск) (https://yadi.sk/d/o5_lo59CthknL)
new.pwn (Pastebin) (http://pastebin.com/0988JgmM)

TheMallard
28.07.2016, 22:35
почему сток?! сток это модификатор!

Тузик
28.07.2016, 23:10
почему сток?! сток это модификатор!
Ты про что? Там функции

Desulaid
28.07.2016, 23:29
https://pp.vk.me/c7001/v7001169/24bda/WBnx5fQdmLI.jpg
Котик в ужасе 0Ao



if(weapon) weapon = 0, format(string, sizeof(string), "не выдавать");
else weapon = 1, format(string, sizeof(string), "выдавать");

Вы по РЛС учились кодить? Или это все ваше пристрастие к тяжелым наркотикам?

Вот. Можно сделать куда проще.

string = ((weapon) ? ("не выдавать") : ("выдавать"));

От форматирования можно отказаться, сцепляя строки.

Snoopdy
28.07.2016, 23:38
https://pp.vk.me/c7001/v7001169/24bda/WBnx5fQdmLI.jpg
Котик в ужасе 0Ao



if(weapon) weapon = 0, format(string, sizeof(string), "не выдавать");
else weapon = 1, format(string, sizeof(string), "выдавать");

Вы по РЛС учились кодить? Или это все ваше пристрастие к тяжелым наркотикам?

Вот. Можно сделать куда проще.

string = ((weapon) ? ("не выдавать") : ("выдавать"));

От форматирования можно отказаться, сцепляя строки.

Сир, упакуйте вашу строку

Тузик
29.07.2016, 00:11
1) это все будет редактироваться.
2) сир, ты знаешь почему я писал через лог.оператор
3) а вот за string = (.. спасибо :3 А то я писал бред "weapon == 0? .." ну и шли ошибки :3

Так то мысль была.


Но я повторю: это только дневник, в котором может копаться каждый и ловить функции дорабатывать/делать))

Тузик
29.07.2016, 10:44
LoadPickupFloatInfoFromFile(pickupid, condition)
{
new File:file_ptr, loadinfo[60];
new gpickupid, interiorid, modelid, pickuptype, Float:X,Float:Y,Float:Z, Float:R, Float:infoload;

new pc_type, pc_weapon, pc_health, pc_armour;

file_ptr = fopen("Pickups.txt",filemode:io_read);
if(!file_ptr) return 0;

while(fread(file_ptr, loadinfo, sizeof(loadinfo)))
{
if(sscanf(loadinfo, "p<,>iiiiiiiifffp<;>f", gpickupid, interiorid, pc_type, modelid, pickuptype, pc_weapon,pc_health,pc_armour, X,Y,Z, R))
{
continue;
}
if(gpickupid == pickupid)
{
switch(condition)
{
case 0: infoload = X;
case 1: infoload = Y;
case 2: infoload = Z;
case 3: infoload = R;
}
}
}
return infoload; // ***
}

Как бы мне возвратить дробное число?

*** В "return infoload;" пишет 213 предупреждение (пропущен tag).


Или можно это запихнуть в одну функцию? (Сомневаюсь)


LoadPickupIntegerInfoFromFile(pickupid, infoload)
{
new File:file_ptr, loadinfo[60];
new gpickupid, interiorid, modelid, pickuptype;

new pc_type, pc_weapon, pc_health, pc_armour;

file_ptr = fopen("Pickups.txt",filemode:io_read);
if(!file_ptr) return 0;

while(fread(file_ptr, loadinfo, sizeof(loadinfo)))
{
if(sscanf(loadinfo, "p<,>iiiiiiii", gpickupid, interiorid, pc_type, modelid, pickuptype, pc_weapon,pc_health,pc_armour))
{
continue;
}
if(gpickupid == pickupid)
{
switch(infoload)
{
case 0: infoload = interiorid;
case 1: infoload = pc_type;
case 2: infoload = modelid;
case 3: infoload = pickuptype;
case 4: infoload = pc_weapon;
case 5: infoload = pc_health;
case 6: infoload = pc_armour;
}
}
}
return infoload;
}

Seregamil
29.07.2016, 10:50
Float:LoadPickupFloatInfoFromFile(pickupid, condition)
Чтобы дробное вернуть

Тузик
29.07.2016, 12:00
Float:LoadPickupFloatInfoFromFile(pickupid, condition)
Чтобы дробное вернуть

https://3.downloader.disk.yandex.ru/disk/314d9a48dd37cdcf3b285f6d1c3c55c32be314e1ab7e1fa103f82a314d960823/579b4550/syJj0PZoLTtva7Uk8vrl_j46yByEM1EpW2sfwt4Z7PjtVMa1ox2Ix9VAVSTl61ZOftkvZ3TOlFG8ZovVafCEoA%3D%3D?uid=0&filename=2016-07-29_11-58-50.png&disposition=inline&hash=&limit=0&content_type=image%2Fpng&fsize=17532&hid=8d112709a23453e180350a2b17113d7e&media_type=image&tknv=v2&etag=f6688dd4718f38a1358f6def7aaf623f

Что-то обломно :С

С (540) return 0.0; избежит предупреждение, но верно ли так будет? :D

Забыл про этот варнинг. Нужно объявлять функцию до ее использования. .__.

DeimoS
29.07.2016, 13:59
1) это все будет редактироваться.
2) сир, ты знаешь почему я писал через лог.оператор
3) а вот за string = (.. спасибо :3 А то я писал бред "weapon == 0? .." ну и шли ошибки :3

Так то мысль была.


Но я повторю: это только дневник, в котором может копаться каждый и ловить функции дорабатывать/делать))

Можно так:

format(string, sizeof(string), "[1] Вы выбрали %s аргумент weapon.", (weapon == 0 ? ("не выдавать") : ("выдавать")));
weapon = (weapon == 0 ? 1 : 0);

ziggi
29.07.2016, 14:21
Безобразие вида:

if(weapon) weapon = 0, format(string, sizeof(string), "не выдавать");
else weapon = 1, format(string, sizeof(string), "выдавать");
format(string, sizeof(string), "[1] Вы выбрали %s агрумент weapon.", string);
и

format(pg_string, sizeof(pg_string),
"Выберите что хотите выдавать игроку:\n\
[1] %s оружие\n\
[2] %s здоровье\n\
[3] %s броню\n\
[4] Создать Pickup",
weapon == 1? ("{BF0000}Не выдавать") : ("{009900}Выдавать"),
health == 1? ("{BF0000}Не выдавать") : ("{009900}Выдавать"),
armour == 1? ("{BF0000}Не выдавать") : ("{009900}Выдавать"));


нужно заменить на что-то вроде этого:
Вверх:


new
gTextSelect[2][] = {"не выдавать", "выдавать"},
gTextSelectDialog[2][] = {"{BF0000}Не выдавать", "{009900}Выдавать"};



format(string, sizeof(string), "[1] Вы выбрали %s агрумент weapon.", gTextSelect[weapon]);
weapon = !weapon;


format(pg_string, sizeof(pg_string),
"Выберите что хотите выдавать игроку:\n\
[1] %s оружие\n\
[2] %s здоровье\n\
[3] %s броню\n\
[4] Создать Pickup",
gTextSelectDialog[weapon],
gTextSelectDialog[health],
gTextSelectDialog[armour]);

Ну и ещё куча мелочей, таких как лишние вызовы IsPlayerInAnyVehicle, ведь достаточно использовать результат GetPlayerVehicleID сверяя его с нулём.
Ещё у скрипта будут серьёзные проблемы, если им одновременно будут пользоваться два или более игроков.

Тузик
30.07.2016, 01:21
Когда я буду оптимизировать, тогда я и напишу)

А сейчас это разработка (для общего доступа)

De_Ley
30.07.2016, 02:19
new aVehicle[MAX_PLAYERS] = -1
Вы сделали инициализацию только нулевой ячейке в массиве, остальные будут со значением 0.
Дабы инициализировать весь массив нужно сделать так:

new aVehicle[MAX_PLAYERS] = {-1,...};

Тузик
30.07.2016, 11:06
new aVehicle[MAX_PLAYERS] = -1
Вы сделали инициализацию только нулевой ячейке в массиве, остальные будут со значением 0.
Дабы инициализировать весь массив нужно сделать так:

new aVehicle[MAX_PLAYERS] = {-1,...};

При удалении транспорта aVehicle будет равна -1.

Это я делал команду для тестирования транспорта, просто в мод по какой-то неизвестной мне причине не смог добавить -__-

Вроде эта версия (может изменил) (http://pro-pawn.ru/showthread.php?13980-Создание-транспорта-с-3-функциями-информация-%28-createvehicle%29)