23:55
ОбновитьСмайлыУправление мини-чатом
МИНИ-ЧАТ
Главная страница!

 



 
        
Фильм by SAMP-RUS (16)
AlinaKA 12.09.2017 23:51
Физрук (16)
Phyliciavox 08.09.2017 17:49
 





Рекомендуем:
Добавить IP: 95.172.59.51:7777





Последние Файлы GTA 4 Последние Файлы GTA-MP Реклама
Скрипт GTA 4 элементы Watch... 07.09.2014
Ferrari 360 Spider [EPM con... 13.12.2013
Porsche Cayenne Turbo 2012 ... 13.12.2013
Shelby Terlingua Mustang v1... 13.12.2013
Hamann Lamborghini Gallardo... 27.10.2013
Dgun (AvnanceRP,SampRP,Dimo... 19.03.2016
SAMP скрипт SX Events (MySQ... 03.03.2016
Карта ASL мэрия для SAMP се... 03.03.2016
AIM для SA-MP 0.3.7 22.02.2016
Скачать GTA SAMP 0.3.7 - Кл... 20.07.2015
Страница 1 из 11
Модератор форума: Alcoholik 
Форум SAMP о мультиплеерах для GTA. » SAMP скачивание и обсуждение » SAMP Скрипты » Ammunition [На кликабельных текстдравах] by Games
Ammunition [На кликабельных текстдравах] by Games
Exclus1veДата: Суббота, 18.08.2012, 20:20 | Сообщение # 1
Освоившийся
Группа: Продвинутые
Сообщений: 141
Награды: 4
Город: Санкт-Петербург
Репутация: 330
Замечания: 40%
Статус:
Публикую работу скриптера Games.
Сам он тему создать не может, т.к. находится в группе "Пользователи".

Описание от Games:

Всем привет!
Возможно вы видели меню аммуниции by OKStyle: http://pawn.ucoz.ru/images/sa-mp-038.png

Я решил попробовать создать такое меню + сделать на кликабельных текстдравах. Ну и конечно, сделать код максимально оптимизированным.
Для реализации иконок оружия нужно поместить в папку \models\tхd свой *.tхd файл.
И тут сразу возникает вопрос: А что будет, если игроку вывести это меню, если у него в папке с игрой нет необходимого файла?

Ничего... Иконок в этом случае игроку видно не будет, и правильной работы системы тоже не будет. Поэтому нужно отслеживать, есть ли необходимые для работы файлы.

Для этого я решил сделать проверку стандартной функцией GetPlayerVersion + изменить немного samp.dll:)

Ах да, совсем забыл, вот мой скрин меню аммуниции: http://cruelgame.ru/GamesAmmo.png

Видео:


Код системы:
Code

#include <a_samp>

#define MAX_WEAPONS 6 * 7

new Text:WeaponText[MAX_WEAPONS];
new Text:WeaponIcon[MAX_WEAPONS];
new Text:OtherText[2];
new PlayerVersion[MAX_PLAYERS];

new WeaponNames[][][] = {
{"AK-47~n~$5000~n~100", "weapons:30"}, {"Baseball bat~n~$150~n~1", "weapons:5"},
{"Detonator~n~$2000~n~1", "weapons:40"}, {"Brass Knuckles~n~$100~n~1", "weapons:1"},
{"Photo Camera~n~$500~n~1", "weapons:43"}, {"Cane~n~$200~n~1", "weapons:15"},
{"CellPhone~n~$2400~n~1", "weapons:CellPhone"}, {"Chainsaw~n~$500~n~1", "weapons:9"},
{"Shotgun~n~$800~n~70", "weapons:25"}, {"Colt '45~n~$200~n~30", "weapons:22"},
{"Country Rifle~n~$4000~n~50", "weapons:33"}, {"Desert Eagle~n~$1200~n~20", "weapons:24"},
{"Dildo 1~n~$1000~n~1", "weapons:10"}, {"Dildo 2~n~$1000~n~1", "weapons:11"},
{"Extinguisher~n~$200~n~1", "weapons:42"}, {"Flamethrower~n~$150~n~1", "weapons:37"},
{"Flowers~n~$800~n~8", "weapons:14"}, {"Golf Club~n~$10000~n~1", "weapons:2"},
{"Grenade~n~$800~n~8", "weapons:16"}, {"HS Rocket~n~$2400~n~10", "weapons:36"},
{"IR Goggles~n~$2400~n~1", "weapons:45"}, {"JetPack~n~$10000~n~1", "weapons:JetPack"},
{"Katana~n~$150~n~1", "weapons:8"}, {"Knife~n~$400~n~1", "weapons:4"},
{"M4~n~$4000~n~100", "weapons:31"}, {"Micro SMG~n~$2400~n~70", "weapons:28"},
{"Minigun~n~$24000~n~100", "weapons:38"}, {"Molotov~n~$800~n~3", "weapons:18"},
{"MP5~n~$2000~n~300", "weapons:29"}, {"Nightstick~n~$150~n~1", "weapons:3"},
{"Night Vision~n~$2400~n~1", "weapons:44"}, {"Parachute~n~$1000~n~1", "weapons:46"},
{"Pool Cue~n~$200~n~1", "weapons:7"}, {"RPG~n~$24000~n~10", "weapons:35"},
{"Satchel~n~$800~n~8", "weapons:39"}, {"Sawnoff~n~$800~n~30", "weapons:26"},
{"S.P.A.S~n~$2700~n~25", "weapons:27"}, {"Shovel~n~$1000~n~1", "weapons:6"},
{"Silenced~n~$1000~n~15", "weapons:23"}, {"Sniper Rifle~n~$3400~n~50", "weapons:34"},
{"Spraycan~n~$200~n~50", "weapons:41"}, {"Tec-9~n~$500~n~30", "weapons:32"}
};

public OnFilterScriptInit()
{
    CreateOtherText();
    for(new i, count, calculation; i != MAX_WEAPONS; i++)
    {
        if(i % 7 == 0 && i ^ 0) count++;
        calculation = 30 * (i - (7 * ((54 + (101 * count)) / 101)));
     CreateWeaponText(i, 54 + (101 * count), 123 + calculation, 114 + (101 * count), WeaponNames[i][0]);
     CreateWeaponIcon(i, WeaponNames[i][1], 16 + (101 * count), 118 + calculation);
    }
}

public OnPlayerConnect(playerid)
{
       new string[40];
       GetPlayerVersion(playerid, string, sizeof(string));
       if(!strcmp(string, "0.3e", true)) PlayerVersion[playerid] = 0;
       else PlayerVersion[playerid] = 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
    if(!strcmp("/ammo", cmdtext, true))
    {
        if(PlayerVersion[playerid] == 0) return SendClientMessage(playerid, -1, "{00ccff}Простите, но у вас не установлены необходимые компоненты!");
     for(new i; i != 2; i++) TextDrawShowForPlayer(playerid, OtherText[i]);
     for(new i; i != MAX_WEAPONS; i++) TextDrawShowForPlayer(playerid, WeaponText[i]);
     for(new i; i != MAX_WEAPONS; i++) TextDrawShowForPlayer(playerid, WeaponIcon[i]);
     SelectTextDraw(playerid, 0xA3B4C5FF);
     return 1;
    }
    return 0;
}

public OnPlayerClickTextDraw(playerid, Text:clickedid)
{
    new string[128];
    for(new i; i != MAX_WEAPONS; i++)
    {
     if(clickedid == WeaponIcon[i])
     {
         format(string, sizeof(string), "{00ccff}Вы нажали на WeaponIcon[%i]", i);
         SendClientMessage(playerid, -1, string);
         break;
     }
    }
    if(!(_:clickedid ^ 0xFFFF))
    {
     for(new i; i != 2; i++) TextDrawHideForPlayer(playerid, OtherText[i]);
     for(new i; i != MAX_WEAPONS; i++) TextDrawHideForPlayer(playerid, WeaponText[i]);
     for(new i; i != MAX_WEAPONS; i++) TextDrawHideForPlayer(playerid, WeaponIcon[i]);
     SendClientMessage(playerid, -1, "{00ccff}Вы нажали ESC.");
    }
}

stock CreateWeaponText(ID, X, Y, Text_X, Text[])
{
    WeaponText[ID] = TextDrawCreate(X, Y, Text);
    TextDrawBackgroundColor(WeaponText[ID], 255);
    TextDrawFont(WeaponText[ID], 1);
    TextDrawLetterSize(WeaponText[ID], 0.219999, 0.699998);
    TextDrawColor(WeaponText[ID], -1);
    TextDrawSetOutline(WeaponText[ID], 1);
    TextDrawSetProportional(WeaponText[ID], 1);
    TextDrawUseBox(WeaponText[ID], 1);
    TextDrawBoxColor(WeaponText[ID], 255);
    TextDrawTextSize(WeaponText[ID], Text_X, 0.000000);
}

stock CreateWeaponIcon(ID, Text[], X, Y)
{
    WeaponIcon[ID] = TextDrawCreate(X, Y, Text);
    TextDrawBackgroundColor(WeaponIcon[ID], 255);
    TextDrawFont(WeaponIcon[ID], 4);
    TextDrawLetterSize(WeaponIcon[ID], 0.500000, 1.000000);
    TextDrawColor(WeaponIcon[ID], -1);
    TextDrawSetOutline(WeaponIcon[ID], 0);
    TextDrawSetProportional(WeaponIcon[ID], 1);
    TextDrawSetShadow(WeaponIcon[ID], 1);
    TextDrawUseBox(WeaponIcon[ID], 1);
    TextDrawBoxColor(WeaponIcon[ID], 255);
    TextDrawTextSize(WeaponIcon[ID], 31.000000, 27.000000);
    TextDrawSetSelectable(WeaponIcon[ID], true);
}

stock CreateOtherText()
{
    OtherText[0] = TextDrawCreate(631.000000, 110.000000, "~~");
    TextDrawBackgroundColor(OtherText[0], 255);
    TextDrawFont(OtherText[0], 1);
    TextDrawLetterSize(OtherText[0], 0.500000, 24.499998);
    TextDrawColor(OtherText[0], -1);
    TextDrawSetOutline(OtherText[0], 0);
    TextDrawSetProportional(OtherText[0], 1);
    TextDrawSetShadow(OtherText[0], 1);
    TextDrawUseBox(OtherText[0], 1);
    TextDrawBoxColor(OtherText[0], 910773960);
    TextDrawTextSize(OtherText[0], 9.000000, 0.000000);

    OtherText[1] = TextDrawCreate(220.000000, 110.000000, "Welcome to Ammu-Nation!");
    TextDrawBackgroundColor(OtherText[1], 255);
    TextDrawFont(OtherText[1], 2);
    TextDrawLetterSize(OtherText[1], 0.339998, 0.899999);
    TextDrawColor(OtherText[1], -1);
    TextDrawSetOutline(OtherText[1], 1);
    TextDrawSetProportional(OtherText[1], 1);
}


Теперь давайте хоть немного разберем мой код:

Собственно мозг системы находится здесь:

Code

public OnFilterScriptInit()
{
       CreateOtherText();
       for(new i, count, calculation; i != MAX_WEAPONS; i++)
       {
           if(i % 7 == 0 && i ^ 0) count++;
           calculation = 30 * (i - (7 * ((54 + (101 * count)) / 101)));
           CreateWeaponText(i, 54 + (101 * count), 123 + calculation, 114 + (101 * count), WeaponNames[i][0]);
           CreateWeaponIcon(i, WeaponNames[i][1], 16 + (101 * count), 118 + calculation);
       }
}


Именно эта часть кода рассчитывает позицию каждого создаваемого текстдрава на экране.
Если было бы просто создание текстдравов без формул - то этот код занимал бы примерно 1000 строчек.

При коннекте игрока определяется версия клиента.
Если версия "0.3e", то переменная PlayerVersion[playerid] принимает значение 0, иначе примет значение 1.

Таким образом, в любой части кода мы может отследить, были ли добавлены в папку с игрой необходимые компоненты для работы системы.
Именно это я и сделал при вводе команды /ammo :
Code
if(PlayerVersion[playerid] == 0) return SendClientMessage(playerid, -1, "{00ccff}Простите, но у вас не установлены необходимые компоненты!");


Заместо сообщения Вы можете например просто вывести меню на диалогах и т.д.

Как вы видите, я сделал поддержку кликабельных текстдравов, т.е. можно нажать на любую иконку оружия:

Code

if(clickedid == WeaponIcon[i])
{
       format(string, sizeof(string), "{00ccff}Вы нажали на WeaponIcon[%i]", i);
       SendClientMessage(playerid, -1, string);
       break;
}


Саму покупку не делал, думаю, это Вы сможете сделать самостоятельно.

Меню можно и нужно закрывать по нажатию на ESC:

Code

if(!(_:clickedid ^ 0xFFFF))
{
       for(new i; i != 2; i++) TextDrawHideForPlayer(playerid, OtherText[i]);
       for(new i; i != MAX_WEAPONS; i++) TextDrawHideForPlayer(playerid, WeaponText[i]);
       for(new i; i != MAX_WEAPONS; i++) TextDrawHideForPlayer(playerid, WeaponIcon[i]);
       SendClientMessage(playerid, -1, "{00ccff}Вы нажали ESC.");
}



[/HR]
Перейдем к другой части... Поговорим о *.tхd файле.
Как я и говорил выше, его нужно поместить в папку /models/tхd.
Название моего файла: weapons.tхd

Поэтому, всякий раз, когда я хочу создать спрайт из игры, я должен указывать:
weapons:Name

Для удобства я назвал спрайты по ид оружию: http://wiki.sa-mp.com/wiki/Weapons
Т.е. например для создания иконки дигла, нужно использовать weapons:24.

Из дополнительных иконок я добавил телефон и JetPack, их иконки создавать так:
weapons:CellPhone - телефон
weapons:JetPack - JetPack

Кстати, иконки не имеют заднего фона, поэтому их можно использовать на любом фоне:



Ну вроде всё...

Скачать файлы:
http://cruelgame.ru/AmmoFiles.rar - weapons.tхd + samp.dll

Софт, который я использовал:
Pawno
IDA - The Interactive Disassembler
TXDWorkShop
Paint



node.js

Сообщение отредактировал Exclus1ve - Суббота, 18.08.2012, 20:37
GamesДата: Суббота, 18.08.2012, 20:24 | Сообщение # 2
Новенький
Группа: Продвинутые
Сообщений: 8
Награды: 1
Город: Прим. край
Репутация: 147
Замечания: 0%
Статус:
Во, Exclus1ve, спасибо.
А то сам создать тему в этом разделе не могу :(

zEscДата: Воскресенье, 19.08.2012, 01:47 | Сообщение # 3
Global Elite
Группа: Ангел Хранитель
Сообщений: 895
Награды: 20
Репутация: 856
Замечания: 0%
Статус:
Молодец, дам попозже плюсики


scropionsДата: Воскресенье, 19.08.2012, 03:26 | Сообщение # 4
Новенький
Группа: Пользователи
Сообщений: 25
Награды: 0
Город: Гомель
Репутация: 10
Замечания: 0%
Статус:
позже заберу
hqДата: Понедельник, 20.08.2012, 00:05 | Сообщение # 5
Освоившийся
Группа: Media-ProGroup
Сообщений: 132
Награды: 4
Город: Воронеж
Репутация: 225
Замечания: 0%
Статус:
Отличный скрипт. Удачи тебе)


WINNER_1Дата: Понедельник, 20.08.2012, 17:35 | Сообщение # 6
Новенький
Группа: Пользователи
Награды: 0
Город: SRC
Репутация: 160
Замечания: 20%
Статус:
норм
TOMBRAIDERДата: Суббота, 08.12.2012, 20:27 | Сообщение # 7
Новенький
Группа: Пользователи
Сообщений: 3
Награды: 0
Репутация: 0
Замечания: 0%
Статус:
Ссылка сдохла :(
HawcДата: Суббота, 08.12.2012, 20:36 | Сообщение # 8
Местный
Группа: Publishers
Сообщений: 581
Награды: 10
Город: Санкт-Петербург
Репутация: 773
Замечания: 0%
Статус:
Quote (TOMBRAIDER)
Ссылка сдохла


Смотри на дату создания темы.



TOMBRAIDERДата: Понедельник, 10.12.2012, 23:43 | Сообщение # 9
Новенький
Группа: Пользователи
Сообщений: 3
Награды: 0
Репутация: 0
Замечания: 0%
Статус:
Quote (Hawc)
Смотри на дату создания темы.


Если есть у кого выложите сюда ссылку заранее спасибо.

Форум SAMP о мультиплеерах для GTA. » SAMP скачивание и обсуждение » SAMP Скрипты » Ammunition [На кликабельных текстдравах] by Games
Страница 1 из 11
Поиск:





 


 


 
Хостинг от uCoz SAMP-RUS.COM