 |
|
 |
|
|
|
Последние Файлы GTA 4 |
Последние Файлы GTA-MP |
Реклама |
|
|
|
|
|
Вопросы и ответы по 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 |
| |
|
|
| [[[WampiR]]] | Дата: Понедельник, 04.11.2013, 19:33 | Сообщение # 1711 |
|
Уверенный в себе
Группа:
Продвинутые
Сообщений: 202
Награды: 2
Город: Омск
Репутация: -22
Замечания: 20%
Статус: 
| Цитата Weddew (  ) В принципе возможно, но не для вас Можно конкретнее, почему именно не для меня?
|
| |
|
|
| Weddew | Дата: Четверг, 07.11.2013, 21:39 | Сообщение # 1712 |
|
Группа:
Ангел Хранитель
Сообщений: 1251
Награды: 19
Город: Казань
Репутация: 1740
Замечания: 0%
Статус: 
| Цитата [[[WampiR]]] (  ) Можно конкретнее, почему именно не для меня? Я имею в виду, что необходимы знания таких языков, как C/C++/C#
www.weddew-shop.ru
|
| |
|
|
| 4o_kavo | Дата: Воскресенье, 10.11.2013, 12:04 | Сообщение # 1713 |
|
Постоялец
Группа:
I'm V.I.P.
Сообщений: 354
Награды: 2
Город: Красноярск
Репутация: 216
Замечания: 0%
Статус: 
| Всем привет
Кто знает как сделать что бы в чат можно было писать сообщение например раз в 3 сек?
-=»>Русский Дрифт Серввер «<=- IP: 176.32.36.131:7777
GTA-Rus.com - Grand Theft Auto
Сообщение отредактировал 4o_kavo - Воскресенье, 10.11.2013, 12:08 |
| |
|
|
| Geryy | Дата: Воскресенье, 10.11.2013, 17:57 | Сообщение # 1714 |
|
Советчик
Группа:
Ангел Хранитель
Сообщений: 1187
Награды: 24
Город: Москва
Репутация: 785
Замечания: 0%
Статус: 
| Цитата 4o_kavo (  ) Кто знает как сделать что бы в чат можно было писать сообщение например раз в 3 сек? Ммм... нужно поставить ограничение по времени для каждого игрока. В OnPlayerText например.
Добавить SAMP сервер в спец. вкладку HOSTED 450-500 р.
Сообщение отредактировал Geryy - Воскресенье, 10.11.2013, 17:59 |
| |
|
|
| Max | Дата: Вторник, 12.11.2013, 19:25 | Сообщение # 1715 |
|
Уверенный в себе
Группа:
Продвинутые
Сообщений: 172
Награды: 0
Город: Казань
Репутация: 59
Замечания: 0%
Статус: 
| Код [19:16:38] [debug] Run time error 4: "Array index out of bounds" [19:16:38] [debug] Accessing element at index 65535 past array upper bound 49 [19:16:38] [debug] AMX backtrace: [19:16:38] [debug] #0 0000e340 in public OnPlayerDeath () from ReGiStEr.amx [19:16:38] [death] Steep_Nk died 255
Вот это выдает крашдетектор при использовании OnPlayerDeath
Вот код Код public OnPlayerDeath(playerid, killerid, reason) { KillTimer(Update2[playerid]); return true; }
Простой убивается созданный таймер!
new Update2[MAX_PLAYERS]; Update2[playerid] = SetTimerEx("OnPlayerAll", 2100, true, "i", playerid);
|
| |
|
|
| Weddew | Дата: Вторник, 12.11.2013, 23:32 | Сообщение # 1716 |
|
Группа:
Ангел Хранитель
Сообщений: 1251
Награды: 19
Город: Казань
Репутация: 1740
Замечания: 0%
Статус: 
| Цитата Steep_Nk (  ) Run time error 4: "Array index out of bounds" Индекс массива вышел за границу массива. Цитата Steep_Nk (  ) Accessing element at index 65535 past array upper bound 49 Обращение к 65535 индексу массива, когда верхняя граница - 49 Однако не понятно, на какой именно массив ссылается, так как граница массива Update2 - MAX_PLAYERS != 49 (по умолчанию) Решение: увеличить размерность массива.
www.weddew-shop.ru
|
| |
|
|
| Geryy | Дата: Среда, 13.11.2013, 03:19 | Сообщение # 1717 |
|
Советчик
Группа:
Ангел Хранитель
Сообщений: 1187
Награды: 24
Город: Москва
Репутация: 785
Замечания: 0%
Статус: 
| Цитата Steep_Nk (  ) Вот это выдает крашдетектор при использовании OnPlayerDeath Ищи массивы с размером [50], возможно где-то ему присваивается значения от INVALID_....._ID (65535) Функции с неверно заданными аргументами, тоже могу возвращать значение 65535
Добавить SAMP сервер в спец. вкладку HOSTED 450-500 р.
|
| |
|
|
| Weddew | Дата: Среда, 13.11.2013, 15:27 | Сообщение # 1718 |
|
Группа:
Ангел Хранитель
Сообщений: 1251
Награды: 19
Город: Казань
Репутация: 1740
Замечания: 0%
Статус: 
| Steep_Nk, Вы точно весь public OnPlayerDeath выложили?
www.weddew-shop.ru
Сообщение отредактировал Weddew - Среда, 13.11.2013, 15:27 |
| |
|
|
| Max | Дата: Четверг, 14.11.2013, 20:51 | Сообщение # 1719 |
|
Уверенный в себе
Группа:
Продвинутые
Сообщений: 172
Награды: 0
Город: Казань
Репутация: 59
Замечания: 0%
Статус: 
| Предыдущий вопрос решен !!!
вопрос №2
как извлеч Messages received: и Acks sent из GetPlayerNetworkStats
|
| |
|
|
| Weddew | Дата: Четверг, 14.11.2013, 23:13 | Сообщение # 1720 |
|
Группа:
Ангел Хранитель
Сообщений: 1251
Награды: 19
Город: Казань
Репутация: 1740
Замечания: 0%
Статус: 
| Steep_Nk, Цитата Weddew (  ) Если Вы сами решили свою проблему, то напишите, как Вы ее решили.
www.weddew-shop.ru
|
| |
|
|
| [[[WampiR]]] | Дата: Пятница, 15.11.2013, 01:42 | Сообщение # 1721 |
|
Уверенный в себе
Группа:
Продвинутые
Сообщений: 202
Награды: 2
Город: Омск
Репутация: -22
Замечания: 20%
Статус: 
| Здравствуйте. Вот у меня такая проблема: добавляю в команду "продажи машины игрока, другому игроку" проверку, что если у игрока, которому продают авто меньше лвл, чем у самой машины, то ему машина не продается, вот у меня эта команда срабатывает только когда игрок в авто, но если он выйдет из машины, то сможет продать авто. [cut noguest=/sellmycar - продажа][pwn][/pwn] if(strcmp(cmd, "/sellcar", true) == 0) { if(IsPlayerConnected(playerid)) { if(PlayerInfo[playerid][pCarKey2] == 0 && PlayerInfo[playerid][pCarKey] == 0 ) { SendClientMessage(playerid,COLOR_LIGHTRED2," У вас нет тачки"); return 1; } tmp = strtok(cmdtext,idx); if(!strlen(tmp)) { if(PlayerToKvadrat(playerid, 1059.0021, -1777.3611, 1101.8859, -1735.4606) || PlayerToKvadrat(playerid, 2788.7844, -1467.7683, 2820.6284, -1425.3816) || PlayerToKvadrat(playerid, 293.7184, -1549.3483, 304.6124, -1477.7850) || PlayerToKvadrat(playerid, 2642.7,-1901.2,2842.1,-1668.1) || PlayerToKvadrat(playerid, 1417.6780,2786.3059,1532.8566,2788.3418) || PlayerToKvadrat(playerid, 1463.1936,2724.5845,1533.5640,2761.9668) || PlayerToKvadrat(playerid,112.11,-1792.0,142.50,-1961.0)|| PlayerToKvadrat(playerid,2142.0,-1128.0,2169.0,-1210.0)) { if(IsPlayerInAnyVehicle(playerid)) { new cari = GetPlayerVehicleID(playerid); if(cari == PlayerInfo[playerid][pCarKey2] || cari == PlayerInfo[playerid][pCarKey] ) { RemovePlayerFromVehicle(playerid); TogglePlayerControllable(playerid, 1); new Float:xcar, Float:ycar, Float:zcar, Float:ancar; new mods = GetVehicleModel(cari); GetVehicleZAngle(cari, ancar); GetVehiclePos(cari,xcar,ycar,zcar); DestroyVehicle(cari); CreateVehicle(mods,xcar,ycar,zcar,ancar,AutoInfo[cari][aColor1],AutoInfo[cari][aColor2],SPAWN_CARS); AutoInfo[cari][aAutoX] = xcar; AutoInfo[cari][aAutoY] = ycar; AutoInfo[cari][aAutoZ] = zcar; AutoInfo[cari][aAutoAngle] = ancar; AutoInfo[cari][aStats] = 0; new ptem[64]; format(ptem,sizeof(ptem),"Zig Zag"); strmid(AutoInfo[cari][aOwner], ptem, 0, strlen(ptem), 255); ConsumingMoney[playerid] = 1;
SaveAuto(); gCarLock[cari] = 0; UnLockCar(cari);
format(string,sizeof(string),"{FFA500}Транспорт продается\n{FFA500}Уровень: {FFFFFF}%d\n{FFA500}Стоимость: {FFFFFF}%d",AutoInfo[cari][aKey],AutoInfo[cari][aPrice]); UpdateDynamic3DTextLabelText(nomer[cari],0xFFA500FF,string); if(cari == PlayerInfo[playerid][pCarKey2]) { PlayerInfo[playerid][pCarKey2] = 0; } else if(cari == PlayerInfo[playerid][pCarKey]) { PlayerInfo[playerid][pCarKey] = 0; } return 1; } else { SendClientMessage(playerid,COLOR_GREY,"Вы не в своей купленной тачке"); } } else { SendClientMessage(playerid,COLOR_GREY,"Вы не в тачке"); } } else { SendClientMessage(playerid,COLOR_LIGHTRED,"Для продажи авто пропишите: /sellmycar [id покупателя] [цена]"); SendClientMessage(playerid,COLOR_LIGHTRED,"ВНИМАНИЕ!!! Остерегайтесь обмана!"); } } else { giveplayerid = ReturnUser(tmp); tmp = strtok(cmdtext,idx); if(!strlen(tmp)) { SendClientMessage(playerid,COLOR_LIGHTRED,"Для продажи авто пропишите: /sellmycar [id покупателя] [цена]"); SendClientMessage(playerid,COLOR_LIGHTRED,"ВНИМАНИЕ!!! Остерегайтесь обмана!"); return 1; } new babkis = strval(tmp); if(PlayerInfo[giveplayerid][pCarKey2] != 0 && PlayerInfo[giveplayerid][pCarKey] != 0 ) { SendClientMessage(playerid,COLOR_LIGHTRED2," У него уже есть тачка"); return 1; } if(babkis < 0) { SendClientMessage(playerid,COLOR_GREY,"Цена не меньше 0"); return 1; } if(babkis > 500000000) { SendClientMessage(playerid,COLOR_GREY,"Не больше 500.000.000"); return 1; } if(babkis > GetPlayerMoney(giveplayerid)) { SendClientMessage(playerid,COLOR_LIGHTRED2," У игрока не хватает денег"); return 1; } if(!ProxDetectorS(10.0, playerid, giveplayerid)) { SendClientMessage(playerid,COLOR_GREY,"Вы слишком далеко от игрока"); return 1; } if(CheckPlayerDistanceToVehicle(10.0, playerid, PlayerInfo[playerid][pCarKey])&& CheckPlayerDistanceToVehicle(10.0, playerid, PlayerInfo[playerid][pCarKey2])) { SendClientMessage(playerid,COLOR_GREY,"Около вас находятся оба транспорта! Уйдите от того, который не хотите продавать"); return 1; } if(!CheckPlayerDistanceToVehicle(10.0, playerid, PlayerInfo[playerid][pCarKey]) && !CheckPlayerDistanceToVehicle(10.0, playerid, PlayerInfo[playerid][pCarKey2])) { SendClientMessage(playerid,COLOR_GREY,"Вы слишком далеко от автомобиля"); return 1; } if(CheckPlayerDistanceToVehicle(10.0, playerid, PlayerInfo[playerid][pCarKey])) { predlogidcar[giveplayerid] = PlayerInfo[playerid][pCarKey]; } else if(CheckPlayerDistanceToVehicle(10.0, playerid, PlayerInfo[playerid][pCarKey2])) { predlogidcar[giveplayerid] = PlayerInfo[playerid][pCarKey2]; } GetPlayerName(playerid,sendername,sizeof(sendername)); GetPlayerName(giveplayerid,giveplayer,sizeof(giveplayer)); predlogid[giveplayerid] = playerid; predlogmoney[giveplayerid] = babkis; new kfjsdh = predlogidcar[giveplayerid]; format(string,sizeof(string),"%s предлагает вам купить %s за %d$ (/accept buycar)",sendername,VehicleNames[GetVehicleModel(kfjsdh)-400],babkis); SendClientMessage(giveplayerid,COLOR_LIGHTBLUE,string); format(string,sizeof(string),"Вы предложили %s купить %s за %d$",giveplayer,VehicleNames[GetVehicleModel(kfjsdh)-400],babkis); SendClientMessage(playerid,COLOR_LIGHTBLUE,string); } } return 1; }[/cut]
[cut noguest=Проверка на LvL][pwn][/pwn]new cari = GetPlayerVehicleID(playerid); if(AutoInfo[cari][aKey] > PlayerInfo[giveplayerid][pLevel]) { SendClientMessage(playerid,COLOR_LIGHTRED2,"У него маленький лвл"); return 1; }[/cut]
|
| |
|
|
| Geryy | Дата: Пятница, 15.11.2013, 09:07 | Сообщение # 1722 |
|
Советчик
Группа:
Ангел Хранитель
Сообщений: 1187
Награды: 24
Город: Москва
Репутация: 785
Замечания: 0%
Статус: 
| Цитата [[[WampiR ]];511814]Здравствуйте. Вот у меня такая проблема: добавляю в команду "продажи машины игрока, другому игроку" проверку, что если у игрока, которому продают авто меньше лвл, чем у самой машины, то ему машина не продается, вот у меня эта команда срабатывает только когда игрок в авто, но если он выйдет из машины, то сможет продать авто. У тебя условие только на тачку в которой игрок, когда игрок выйдет условие не выполнится:
new cari = GetPlayerVehicleID(playerid); if(AutoInfo[cari][aKey] > PlayerInfo[giveplayerid][pLevel])
Тебе надо проверять лвл у авто, которое продается. А не в котором сидит игрок.
Добавить SAMP сервер в спец. вкладку HOSTED 450-500 р.
Сообщение отредактировал Geryy - Пятница, 15.11.2013, 09:18 |
| |
|
|
| Max | Дата: Суббота, 16.11.2013, 13:48 | Сообщение # 1723 |
|
Уверенный в себе
Группа:
Продвинутые
Сообщений: 172
Награды: 0
Город: Казань
Репутация: 59
Замечания: 0%
Статус: 
| Как я решил проблему: ================================================================================== Я выложил не тот паблик OnPlayerDeath
А в паблике мода было так что killerid выдавалось PlayerInfo[killerid][pKills]++;
При самоубийстве playerid массив PlayerInfo[killerid][pKills] выходил за пределы т.к небыло killerid ================================================================================== вопрос №2
как извлеч Messages received: и Acks sent из GetPlayerNetworkStats
|
| |
|
|
| Geryy | Дата: Суббота, 16.11.2013, 14:05 | Сообщение # 1724 |
|
Советчик
Группа:
Ангел Хранитель
Сообщений: 1187
Награды: 24
Город: Москва
Репутация: 785
Замечания: 0%
Статус: 
| Цитата Steep_Nk (  ) При самоубийстве playerid массив PlayerInfo[killerid][pKills] выходил за пределы т.к небыло killerid Знач я прав был.
Добавить SAMP сервер в спец. вкладку HOSTED 450-500 р.
|
| |
|
|
| Weddew | Дата: Суббота, 16.11.2013, 14:14 | Сообщение # 1725 |
|
Группа:
Ангел Хранитель
Сообщений: 1251
Награды: 19
Город: Казань
Репутация: 1740
Замечания: 0%
Статус: 
| Цитата Steep_Nk (  ) При самоубийстве playerid массив PlayerInfo[killerid][pKills] выходил за пределы т.к небыло killerid http://wiki.sa-mp.com/wiki/OnPlayerDeath, в примечании указано.Добавлено (16.11.2013, 14:14) ---------------------------------------------
Цитата Steep_Nk (  ) как извлеч Messages received: и Acks sent из GetPlayerNetworkStats Выложите полностью то, что показывает при вызове функции GetPlayerNetworkStats
www.weddew-shop.ru
|
| |
|
|
|
 |
|
 | |
| |
|