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

 



 
          





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





Последние Файлы 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
WeddewДата: Воскресенье, 25.08.2013, 22:33 | Сообщение # 1501
Группа: Ангел Хранитель
Сообщений: 1251
Награды: 19
Город: Казань
Репутация: 1740
Замечания: 0%
Статус:
_BigSm0ke_, кодировка таблицы, кодировка полей таблицы, кодировка базы данных - это все разные понятия. Приравняйте все эти кодировки к одной.

Добавлено (25.08.2013, 22:33)
---------------------------------------------

Цитата (HakeRbesT)
По идее этот код должен убирать ники у всех игроков, однако когда я захожу двумя игроками, то у id 0 видно ник, а у id 1 нет. Почему у нулевого id не скрылся ник?

Не проще ли воспользоваться этой функцией ShowNameTags, чем изобретать велосипед?




www.weddew-shop.ru
_BigSm0ke_Дата: Воскресенье, 25.08.2013, 23:08 | Сообщение # 1502
Местный
Группа: I'm V.I.P.
Сообщений: 674
Награды: 5
Город: Москва
Репутация: 127
Замечания: 0%
Статус:
Цитата (Weddew)
_BigSm0ke_, кодировка таблицы, кодировка полей таблицы, кодировка базы данных - это все разные понятия. Приравняйте все эти кодировки к одной.


так вот в том то и дело что кодировка полей, кодировка бд, кодировка таблиц бд - cp1251_general_ci, а в моде вылезает вообще DATABASE CHAR SET:latin1 откуда не возьмись...



LifeVegas: vk.com/lvgta - Покори вершины Лас-Вегаса в новом РП проекте. COMING SOON
Продаю РП мод: подробнее тут
Решаю задачи по техническим дисциплинам, подробнее тут
WeddewДата: Понедельник, 26.08.2013, 07:18 | Сообщение # 1503
Группа: Ангел Хранитель
Сообщений: 1251
Награды: 19
Город: Казань
Репутация: 1740
Замечания: 0%
Статус:
Цитата (_BigSm0ke_)
так вот в том то и дело что кодировка полей, кодировка бд, кодировка таблиц бд - cp1251_general_ci, а в моде вылезает вообще DATABASE CHAR SET:latin1 откуда не возьмись...

Где именно?




www.weddew-shop.ru
HakeRbesTДата: Понедельник, 26.08.2013, 07:20 | Сообщение # 1504
Новенький
Группа: Пользователи
Сообщений: 72
Награды: 0
Город: Новокузнецк
Репутация: 2
Замечания: 0%
Статус:
Цитата (Weddew)
Не проще ли воспользоваться этой функцией ShowNameTags, чем изобретать велосипед?

Спасибо, работает, но только в gamemode, в filterscript,е не работает

WeddewДата: Понедельник, 26.08.2013, 07:24 | Сообщение # 1505
Группа: Ангел Хранитель
Сообщений: 1251
Награды: 19
Город: Казань
Репутация: 1740
Замечания: 0%
Статус:
HakeRbesT, примечание на Wiki.sa-mp.com

[srt]Important Note: This function can only be used in OnGameModeInit. For use of a similar function like this in the whole gamemode, check out the ShowPlayerNameTagForPlayer function.[/srt]




www.weddew-shop.ru
HakeRbesTДата: Понедельник, 26.08.2013, 07:29 | Сообщение # 1506
Новенький
Группа: Пользователи
Сообщений: 72
Награды: 0
Город: Новокузнецк
Репутация: 2
Замечания: 0%
Статус:
Цитата (Weddew)
HakeRbesT, примечание на Wiki.sa-mp.com

Спасибо большое :)
И ещё один вопрос. Как лучше делать частое обновление, текстдрава со скоростью например или 3D теста, со здоровьем игрока? Запускать таймер в 10 мс. или делать обновление в OnPlayerUpdate?

DemonoloGДата: Понедельник, 26.08.2013, 09:13 | Сообщение # 1507
Постоялец
Группа: Продвинутые
Сообщений: 314
Награды: 2
Репутация: 178
Замечания: 0%
Статус:
HakeRbesT, таймеры это плохо, нагрузка лишняя, лучше OnPlayerUpdate
HakeRbesTДата: Понедельник, 26.08.2013, 12:32 | Сообщение # 1508
Новенький
Группа: Пользователи
Сообщений: 72
Награды: 0
Город: Новокузнецк
Репутация: 2
Замечания: 0%
Статус:
Цитата (DemonoloG)
HakeRbesT, таймеры это плохо, нагрузка лишняя, лучше OnPlayerUpdate

Спасибо, сразу же следующий вопрос. Функция Create3DTextLabel возвращает переменную типа Text3D, мне нужно её сохранить с помощью pVar, но там нет такого типа переменной, как быть?

Добавлено (26.08.2013, 12:32)
---------------------------------------------
Ещё прошу помочь по коду:

Код

public PlayerConnect(step, playerid){
     SendClientMessage(playerid, -1, "PlayerConnect");//@
     if(step == 0){
         SendClientMessage(playerid, -1, "PlayerConnect step 0");//@
         new query[80], playername[MAX_PLAYER_NAME];
         GetPlayerName(playerid, playername, MAX_PLAYER_NAME);
         format(query, 80, "SELECT * FROM `players` WHERE `name` = %s", playername);
         return mysql_function_query(handle, query, true, "PlayerConnect", "ii", 1, playerid);
     }
     if(step == 1){
         SendClientMessage(playerid, -1, "PlayerConnect step 1");//@
         new rows, fields;
         cache_get_data(rows, fields, handle);
         if(!rows){
             SendClientMessage(playerid, -1, "Вы не зарегистрированы!");
             return GKick(playerid, 0);
         }
     }
     return 0;
}

Строки вроде этой:
Код
SendClientMessage(playerid, -1, "PlayerConnect");//@

[b]добавлены, чтобы отследить какой кусок кода выполняется.
В общем выполняется только step == 0, а строка SendClientMessage(playerid, -1, "PlayerConnect");//@ выполняется только один раз.
Вопрос: почему не выполняется второй кусок кода где step == 1?

WeddewДата: Понедельник, 26.08.2013, 16:06 | Сообщение # 1509
Группа: Ангел Хранитель
Сообщений: 1251
Награды: 19
Город: Казань
Репутация: 1740
Замечания: 0%
Статус:
Цитата (HakeRbesT)
Вопрос: почему не выполняется второй кусок кода где step == 1?

Не выполняется он по причине того, что во время вызова PlayerConnect значение параметра step равен 0.
Для того, чтобы выполнилось условие if(step == 1), необходимо вызвать PlayerConnect c step = 1
Пример:
[pwn]PlayerConnect(1, playerid);[/pwn]




www.weddew-shop.ru
KlebitДата: Понедельник, 26.08.2013, 17:51 | Сообщение # 1510
Уверенный в себе
Группа: Пользователи
Сообщений: 265
Награды: 0
Город: None
Репутация: -31
Замечания: 60%
Статус:
Цитата (DemonoloG)
HakeRbesT, таймеры это плохо, нагрузка лишняя, лучше OnPlayerUpdate

идиот?

HakeRbesTДата: Понедельник, 26.08.2013, 19:13 | Сообщение # 1511
Новенький
Группа: Пользователи
Сообщений: 72
Награды: 0
Город: Новокузнецк
Репутация: 2
Замечания: 0%
Статус:
Цитата (Klebit)
идиот?

Зачем же оскорбления?
А как вы считаете нужно?

ExCo4Дата: Вторник, 27.08.2013, 09:28 | Сообщение # 1512
Новенький
Группа: Пользователи
Сообщений: 7
Награды: 0
Город: Belogorsk
Репутация: 0
Замечания: 0%
Статус:
Подскажите как сделать , чтобы когда игрок садился в опр. транспорт ему давался бонус. Я так понимаю через
Код
If(IsPlayerInVehicle (playerid,1242))
?

Добавлено (27.08.2013, 09:28)
---------------------------------------------
Излажу по-подробнее чего я хочу.
Есть код:

Код

EndMap()
{
print("EndMap");
  if(IsOnePlayer)
  {
      if(Winner != -1)
      {
       new string[256];
       GivePlayerMoney(Winner,5000);
       format(string, 256, "~y~~h~%s~n~~r~~h~ one on the map", name_encode(PlayerName(Winner), 2)); // когда игрок 1 на сервере победа не засчитывается
       TextDrawSetString(WinnerText, string);
       Winner = -1;
   }
  }
  else
  {
   if(PlayersOnMap == 1)
   {
       if(Winner != -1)
       {
        new string[256];
        GivePlayerMoney(Winner,5000);
        SetPlayerScore(Winner, GetPlayerScore(Winner)+1);
        format(string, 256, "{ffff00}* Игрок {ffffff}%s{ffff00} Победил! Он получает 5.000$ денег и +1 point к репутации!",name_encode(PlayerName(Winner), 2)); // когда игроки онлайн и один выживает ему дают бонус за победу
        SendClientMessageToAll(COLOR_RED,string);
        format(string, 256, "~y~~h~%s~n~~r~~h~won on the round.", name_encode(PlayerName(Winner), 2));
        TextDrawSetString(WinnerText, string);
        Winner = -1;
    }
   }
  }

  if(BeforeVoteTimerID == -1 && VoteTimerID == -1 && CountDownTimerID == -1 && !IsMapStarts)
  {
   BeforeVoteCount = 5;
   BeforeVoteTimerID = SetTimer("CountDownBeforeVoting", 1000, true);
  }
  return 1;
}

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



Exclusive DM.
GeryyДата: Вторник, 27.08.2013, 11:14 | Сообщение # 1513
Советчик
Группа: Ангел Хранитель
Сообщений: 1187
Награды: 24
Город: Москва
Репутация: 785
Замечания: 0%
Статус:
В колбэках которые определяют посадку в авто или в таймер добавить условие:
if(GetPlayerVehicleID(playerid) == 425)
{
бонус
}



Добавить SAMP сервер в спец. вкладку HOSTED 450-500 р.

Сообщение отредактировал Geryy - Вторник, 27.08.2013, 11:15
nurahmat007Дата: Вторник, 27.08.2013, 22:43 | Сообщение # 1514
Новенький
Группа: Пользователи
Сообщений: 14
Награды: 0
Город: Казань
Репутация: 49
Замечания: 0%
Статус:
пример:
[pwn]public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER)
{
if(GetPlayerVehicleID(playerid) == 579)
{
GivePlayerMoney(playerid, 5000);//дадим бонус $5000
SendClientMessage(playerid, 0xFFFF00FF, "Вы нашли секретно авто и получили бонус {00FF00}$5000");//напишем ему сообщение в чат
}
}
} [/pwn]

_BigSm0ke_Дата: Вторник, 27.08.2013, 23:35 | Сообщение # 1515
Местный
Группа: I'm V.I.P.
Сообщений: 674
Награды: 5
Город: Москва
Репутация: 127
Замечания: 0%
Статус:
Цитата (Weddew)
Где именно?


вот тут:
[pwn]mysql_function_query(dbHandle, "SET NAMES cp1251;", false, "", "");
mysql_function_query(dbHandle, "SET SESSION character_set_server=cp1251;", false, "", "");
new charset[24]; mysql_get_charset(charset, dbHandle, 24);
printf("DATABASE CHAR SET: %s",charset); [/pwn]



LifeVegas: vk.com/lvgta - Покори вершины Лас-Вегаса в новом РП проекте. COMING SOON
Продаю РП мод: подробнее тут
Решаю задачи по техническим дисциплинам, подробнее тут
Поиск:





 


 


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