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

 



 
          





Рекомендуем:





Последние Файлы 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
[GM] The Big PEN1:LS v2.00 ... 04.12.2017
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
Модератор форума: AXE, Weddew  
Вопросы и ответы по GTA SAMP [от 19.03.2013]
WeddewДата: Вторник, 19.03.2013, 15:11 | Сообщение # 1
Группа: Ангел Хранитель
Сообщений: 1251
Награды: 19
Город: Казань
Репутация: 1740
Замечания: 0%
Статус:
В этой теме вы сможете получить ответы, на многие ваши вопросы по PAWN.


Новичкам:


  • Внятно объясняйте Вашу проблему, если Вы получили ошибку, обязательно выкладывайте строки, на которые "ругается" компилятор.
  • Задавайте вопросы исключительно по коду, а не по системам, которые имеются у Вас в моде.
  • Помощь идет только по желанию пользователя, если человек помог Вам только частично, не нужно начинать поливать его грязью.
  • Возможно тип Вашей проблемы уже обсуждался на форуме, воспользуйтесь поиском.
  • В этой теме пользователи лишь оказывают помощь в написании кода, а не пишут его за Вас.
  • Если Вы хотите отблагодарить пользователя, жмите на кнопку . (Только для продвинутых, и выше)
  • Если Вы уже задавали вопрос и не получили на него ответа, то лучше написать в ЛС одному из участников группы , чем засорять тему.
  • Если Вы сами решили свою проблему, то напишите, как Вы ее решили.
  • Если Вас просят выложить код функций, то используйте для этого сервис pastebin.com


Скриптерам:

  • Не оскорблять новичков.
  • Не засорять тему сообщениями, подобные этому: "Закрой PAWNO и иди делай уроки".
  • Не посылать в поиск. Пользователь итак уже пришёл сюда из поиска. Если решение проблемы уже было опубликовано, то указать в какой теме
  • Как можно понятней объяснять решение той, или иной проблемы, по возможности приводить примеры.



Инструкции:

  • [cut noguest=Краткая инструкция для вшивания FS в мод]
    1) Все из callback OnFilterScriptInit вставляем в конец callback OnGameModeInit перед словом return.
    2) Все из callback OnFilterScriptExit вставляем в конец callback OnGameModeExit перед словом return.
    3) Все объявления переменных (new ...) и констант (const ...; #define ... ...) в начало мода.
    4) Все прототипы (forward ...(...) ) ко всем прототипам.
    5) Все описания нестандартных функций (public ...(...); stock ...(...); ...(...){...} ), которых нет в моде, вставляем в конец мода.

    P.S. Данный мануал не гарантирует, что после копирования все будет работать, так как еще потребуется подгонять одни системы под другие.
    P.P.S Если в одном из callback`ов Вы не обнаружили кода, то переходите к следующему пункту инструкции.
    [/cut]
  • [cut noguest=Защита от ботов]
    В OnPlayerConnect
    [pwn]if(GetPlayersSameIp(playerid) > 3) Kick(playerid);[/pwn]
    В конец мода
    [pwn]stock GetPlayersSameIp(playerid)
    {//by Weddew
    //Возвращает количество подключенных игроков с таким же IP как у playerid
    new count = 0, p_ip[16], i_ip[16];
    GetPlayerIp(playerid, p_ip, sizeof(p_ip));
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    GetPlayerIp(playerid, i_ip, sizeof(i_ip));
    if(i != playerid)
    {
    if(!strcmp(p_ip, i_ip, false)) count++;
    }
    }
    return count;
    }[/pwn]
    [/cut]
  • [cut noguest=Проверка на Role Play ник]
    В конец мода:
    [pwn]
    stock IsARPNickname(playerid)
    {
    //by Weddew
    new p_n[MAX_PLAYER_NAME], dcount = 0;
    GetPlayerName(playerid, p_n, sizeof(p_n))
    for(i = 0; i < strlen(p_n); i++)
    {
    if(p_n[i] == '_') dcount++;
    }
    if(dcount != 1 || p_n[0] == '_' || p_n[strlen(p_n)-1] == '_') return false;
    return true;
    }[/pwn]

    В OnPlayerConnect

    [pwn]
    if(!IsARPNickname(playerid)) Kick(playerid);[/pwn]

    P.S.:
    Не пропустит: _Nick_Name_, _Nick_Name, NickName_
    Пропустит: Nick_Name, NICK_NAME, NiCk_name, nick_name[/cut]




www.weddew-shop.ru


Сообщение отредактировал Weddew - Среда, 23.10.2013, 21:45
AnthonyДата: Четверг, 18.04.2013, 18:41 | Сообщение # 421
Уверенный в себе
Группа: Publishers
Сообщений: 211
Награды: 4
Замечания: 0%
Статус:
Weddew
Спасибо!




CruiserДата: Четверг, 18.04.2013, 18:45 | Сообщение # 422
Новенький
Группа: Пользователи
Сообщений: 25
Награды: 0
Город: Армавир
Репутация: 0
Замечания: 0%
Статус:
Цитата (Weddew)
Cruiser, естественно Вы ничего не выведите, так как Вы не кэшируете полученные данные и не выводите результат запроса в поток.
Там где нужно:
format(string, sizeof(string), "SELECT * FROM `Accounts` WHERE `Name` = '%s'", Name(playerid));
mysql_function_query(connectionHandle, string, true, "LoadAccount","d", playerid);

Ко всем public функциям:
forward LoadAccount(playerid);
public LoadAccount(playerid)
{
new rows, fields;
cache_get_data(rows, fields);
if(rows != 0)
{
new maximum[128], starmail[256];
cache_get_field_content(0, "Email", starmail);
format(string, sizeof(string), "Mail: %s", starmail);
SendClientMessage(playerid, COLOR_YELLOW, string);

cache_get_field_content(0, "Key", maximum), PlayerInfo[playerid][pKey] = strval(maximum);
format(string, sizeof(string), "Пароль: %s", PlayerInfo[playerid][pKey]);
SendClientMessage(playerid, COLOR_YELLOW, string);
}
}

Все что я писал это все строки из одного диалога, мне надо чтобы можно было вытащить email и пароль в одном диалоге, это возможно? или просто для того чтобы вывести надо обязательно создавать отдельный паблик?

[[[WampiR]]]Дата: Четверг, 18.04.2013, 19:05 | Сообщение # 423
Уверенный в себе
Группа: Продвинутые
Сообщений: 202
Награды: 2
Город: Омск
Репутация: -22
Замечания: 20%
Статус:
Вот нормальная проверка но почемуто выкидывает даже с фракционных машин и который на нубореспе. А так если есть ключ то можно ездить. Можно ли как нибуть сделать чтобы не выкидывало с фракционных и который на нубореспе машин?
[pwn] if(PlayerInfo[playerid][pCarKey] != vehicleid)
{
if(PlayerInfo[playerid][pAdmin] > 0)
{
SendClientMessage(playerid,COLOR_LIGHTGREEN,"(( Т.к. вы админ, вы можете ехать на авто! ))");
}
else
{
SendClientMessage(playerid,COLOR_LIGHTGREEN,"Нет ключа от автомобиля!");
RemovePlayerFromVehicle(playerid);
TogglePlayerControllable(playerid, 1);
}
}[/pwn]

SPACE_MANДата: Четверг, 18.04.2013, 20:37 | Сообщение # 424
Новенький
Группа: Пользователи
Сообщений: 35
Награды: 0
Репутация: 0
Замечания: 0%
Статус:
Почему если ставить вместо (i, PHealth+1), (i, PHealth+0.5) то реген не работает?
Код
forward ReHealth();
public ReHealth()
{
    new Float:PHealth;
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
            GetPlayerHealth(i, PHealth);
            if(PHealth < 100) SetPlayerHealth(i, PHealth+1);
    }
    return true;
}



Смерть SPACE_MAN-у
WeddewДата: Четверг, 18.04.2013, 21:25 | Сообщение # 425
Группа: Ангел Хранитель
Сообщений: 1251
Награды: 19
Город: Казань
Репутация: 1740
Замечания: 0%
Статус:
Цитата (Cruiser)
Все что я писал это все строки из одного диалога, мне надо чтобы можно было вытащить email и пароль в одном диалоге, это возможно? или просто для того чтобы вывести надо обязательно создавать отдельный паблик?

Вы в любом случае выведите. Здесь работает метод FILO (First in last out) или иначе говоря stack (если не понятно что это за термины, то читайте статьи в wikipedia).




www.weddew-shop.ru
Nikita01041997Дата: Пятница, 19.04.2013, 00:20 | Сообщение # 426
Новенький
Группа: Пользователи
Сообщений: 74
Награды: 0
Город: Алейск
Репутация: -37
Замечания: 0%
Статус:
Weddew, ещё раз вставил и вот что у меня получилось:
[pwn]C:\Users\Íèêèòà\Desktop\Genix Role Play version 7.0 FINAL\gamemodes\GenixRp.pwn(25433) : error 032: array index out of bounds (variable "coronoscar")
C:\Users\Íèêèòà\Desktop\Genix Role Play version 7.0 FINAL\gamemodes\GenixRp.pwn(28051) : error 032: array index out of bounds (variable "coronoscar")
C:\Users\Íèêèòà\Desktop\Genix Role Play version 7.0 FINAL\gamemodes\GenixRp.pwn(28055) : warning 225: unreachable code
C:\Users\Íèêèòà\Desktop\Genix Role Play version 7.0 FINAL\gamemodes\GenixRp.pwn(67088) : error 010: invalid function or declaration
Pawn compiler 3.2.3664 Copyright © 1997-2006, ITB CompuPhase
3 Errors.[/pwn]
Вставил как вы писали код и в канец мода вставил код который писал geryy! Объясните что не так?



люблю этот сайт
WeddewДата: Пятница, 19.04.2013, 00:28 | Сообщение # 427
Группа: Ангел Хранитель
Сообщений: 1251
Награды: 19
Город: Казань
Репутация: 1740
Замечания: 0%
Статус:
Цитата (Nikita01041997)
Вставил как вы писали код и в канец мода вставил код который писал geryy! Объясните что не так?

Вам писали пример, а не готовый код. Перед тем как что-то вставлять в свой мод, читайте внимательно то, что Вам пишут.




www.weddew-shop.ru


Сообщение отредактировал Weddew - Пятница, 19.04.2013, 00:28
Nikita01041997Дата: Пятница, 19.04.2013, 08:46 | Сообщение # 428
Новенький
Группа: Пользователи
Сообщений: 74
Награды: 0
Город: Алейск
Репутация: -37
Замечания: 0%
Статус:
Weddew, я внимательно прочитал, поменял всё на своё, всё ровно не получается!

Добавлено (19.04.2013, 08:46)
---------------------------------------------
спасибо geryy! Всё получилось!


люблю этот сайт
[[[WampiR]]]Дата: Пятница, 19.04.2013, 12:00 | Сообщение # 429
Уверенный в себе
Группа: Продвинутые
Сообщений: 202
Награды: 2
Город: Омск
Репутация: -22
Замечания: 20%
Статус:
Ну подскажите тут не как нельзя сделать чтобы выкидывало только с тех машин для которых требуется ключ?
[pwn]1
2
3
4
5
6
7
8
9
10
11
12
13
if(PlayerInfo[playerid][pCarKey] != vehicleid)
{
if(PlayerInfo[playerid][pAdmin] > 0)
{
SendClientMessage(playerid,COLOR_LIGHTGREEN,"(( Т.к. вы админ, вы можете ехать на авто! ))");
}
else
{
SendClientMessage(playerid,COLOR_LIGHTGREEN,"Нет ключа от автомобиля!");
RemovePlayerFromVehicle(playerid);
TogglePlayerControllable(playerid, 1);
}
}[/pwn]

WeddewДата: Пятница, 19.04.2013, 12:14 | Сообщение # 430
Группа: Ангел Хранитель
Сообщений: 1251
Награды: 19
Город: Казань
Репутация: 1740
Замечания: 0%
Статус:
Цитата (|||WampiR|||)
Ну подскажите тут не как нельзя сделать чтобы выкидывало только с тех машин для которых требуется ключ?

Смотря что храниться в элементе pCarKey. Если храниться ID транспорта, то условие должно быть следующим:
[pwn]public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(newstate == PLAYER_STATE_DRIVER)
{
if(PlayerInfo[playerid][pCarKey] != vehicleid && PlayerInfo[playerid][pCarKey2] != vehicleid)
{
// Действие, которое будем совершать с игроком.
}
}
return true;
}[/pwn]




www.weddew-shop.ru
Nikita01041997Дата: Пятница, 19.04.2013, 12:14 | Сообщение # 431
Новенький
Группа: Пользователи
Сообщений: 74
Награды: 0
Город: Алейск
Репутация: -37
Замечания: 0%
Статус:
Цитата (|||WampiR|||)
выкидывало только с тех машин для которых требуется ключ?

вот это вставь:
[pwn]if(newcar >= "переменная для машины" && newcar <= "переменная для машины") { }[/pwn]



люблю этот сайт
WeddewДата: Пятница, 19.04.2013, 12:36 | Сообщение # 432
Группа: Ангел Хранитель
Сообщений: 1251
Награды: 19
Город: Казань
Репутация: 1740
Замечания: 0%
Статус:
Цитата (|||WampiR|||)
Ну подскажите тут не как нельзя сделать чтобы выкидывало только с тех машин для которых требуется ключ?

Прочитал внимательнее, тут есть несколько вариантов:
1) Ограничить ID`ы транспорта, т. е. проверку делать в пределах ID`ов с ключами. (Вариант не оптимальный).
Пример:
[pwn]public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(newstate == PLAYER_STATE_DRIVER)
{
new vehicleid = GetPlayerVehicleID(playerid);
if(vehicleid >= Начало границы && vehicleid <= Конец границы)
{
if(PlayerInfo[playerid][pCarKey] != vehicleid && PlayerInfo[playerid][pCarKey2] != vehicleid)
{
// Действие, которое будем совершать с игроком.
}
}
}
return true;
}[/pwn]
2) Объявить массив для всех транспортов, который будет указывать, требуется ли ключ для данного авто или нет. (Самый оптимальный вариант на мой взгляд).
Пример:

В начало:
[pwn]new lockedvehicle[MAX_VEHICLES];[/pwn]

В то место, где происходит подгрузка личного транспорта:
[pwn]new tmpvehicle = CreateVehicle(...);
lockedvehicle[tmpvehicle] = true;[/pwn]

Сама проверка:
[pwn]public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(newstate == PLAYER_STATE_DRIVER)
{
new vehicleid = GetPlayerVehicleID(playerid);
if(lockedvehicle[vehicleid] && PlayerInfo[playerid][pCarKey] != vehicleid && PlayerInfo[playerid][pCarKey2] != vehicleid)
{
// Действие, которое будем совершать с игроком.
}
}
return true;
}[/pwn]




www.weddew-shop.ru
AnthonyДата: Пятница, 19.04.2013, 13:17 | Сообщение # 433
Уверенный в себе
Группа: Publishers
Сообщений: 211
Награды: 4
Замечания: 0%
Статус:
Цитата (Weddew)
Удаление по окончанию движения нужно делать в callback`e OnObjectMoved.

В общем не вышло с этим, наверно из за того что объект создается при вводе команды и сразу начинает двигаться "object1".
Можно ли сделать проверку на то что объект находиться рядом другого?

Добавлено (19.04.2013, 13:17)
---------------------------------------------
[off]рядом другого объекта[/off]



WeddewДата: Пятница, 19.04.2013, 13:17 | Сообщение # 434
Группа: Ангел Хранитель
Сообщений: 1251
Награды: 19
Город: Казань
Репутация: 1740
Замечания: 0%
Статус:
Цитата (Vsevolod)
В общем не вышло с этим, наверно из за того что объект создается при вводе команды и сразу начинает двигаться "object1".

Объект случайно не динамический?




www.weddew-shop.ru
[[[WampiR]]]Дата: Пятница, 19.04.2013, 14:03 | Сообщение # 435
Уверенный в себе
Группа: Продвинутые
Сообщений: 202
Награды: 2
Город: Омск
Репутация: -22
Замечания: 20%
Статус:
Почему в SAMP'E некоторые буквы вообще поидеи английские а их показывает по русски? Чаще всего первая буква предложения.
Поиск:





 


 


 
Хостинг от uCoz samp.at.ua