PDA

Просмотр полной версии : [Include] fixes.inc - исправление багов SA-MP



ziggi
12.07.2016, 01:08
fixes.inc
GitHub (https://github.com/Open-GTO/sa-mp-fixes)

Описание
Исправления ошибок SA-MP, написанные сообществом.

Введение
SA-MP - это тестируемое программное обеспечение написанное небольшой командой в своё свободное время, возможно здесь есть ошибки (как и в любом программном обеспечении). Некоторые из них были известны в течении длительного времени, но имеют низкий приоритет из-за их незначительных эффектов, другие просто не исправляются в течение длительного времени. Для многих из этих ошибок есть решения, которые могут быть реализованы с помощью Pawn (и это может быть проще, чем их реализация в исходном коде SA-MP). Целью этого скрипта является объединение как можно большего числа исправлений в одну библиотеку, удобную в использовании всем.

Использование
Для того, чтобы использовать этот скрипт, просто включите его после подключения стандартных SA-MP функций, но перед другими библиотеками:
#include <a_samp>
// Любые переопределения стандартных констант должны быть здесь
//#undef MAX_PLAYERS
//#define MAX_PLAYERS 10
#include <fixes>
#include <other>
Для отключения любого исправления по какой-либо причине делайте следующее:
#define FIX_<name> 0
Например, чтобы отключить все file.inc исправления, если вы всегда правильно проверяете дескриптор файла, сделайте следующее:
#include <a_samp>
#define FIX_file_inc 0
#include <fixes>
#include <other>
Все имена исправлений имеют отдельные слова, и все они, с их описанием, перечислены ниже.

Если на вашем сервере работает только один скрипт (то есть нет фильтр скриптов), вы можете использовать следующую настройку для улучшения кода fixes.inc:
#include <a_samp>
#define FIXES_Single 1
#include <fixes>
#include <other>

Исправления



Название

Ошибка

Автор

Сообщение

Официально исправлено?


GetPlayerColor
Возвращает "0" если "SetPlayerColor" не был вызван.
KoczkaHUN




FILTERSCRIPT
Несмотря на то, что этот макрос есть в каждом новом скрипте (new.pwn), многие люде не определяют "FILTERSCRIPT" в соответствующих случаях.
Y_Less (https://github.com/Y-Less/)




SpawnPlayer
Убивает игрока, если он в транспорте.
Y_Less (https://github.com/Y-Less/)




SetPlayerName
Использование "SetPlayerName" с новым именем, отличающимся от старого только регистром символов, не меняет ник вовсе.
Y_Less (https://github.com/Y-Less/)/simonepri (https://github.com/simonepri/)




GetPlayerSkin
Возвращает новый скин после вызова "SetSpawnInfo", но до фактического изменения скина у игрока.
Y_Less (https://github.com/Y-Less/)




GetWeaponName
Ничего не возвращает для 18, 44 и 45.
Y_Less (https://github.com/Y-Less/)

0.3.7


SetPlayerWorldBounds
Прицеливание может обойти границу.
Y_Less (https://github.com/Y-Less/)




TogglePlayerControllable
Другие игроки видят как вы бежите на месте.
Slice (https://github.com/oscar-broman/)
Link (http://forum.sa-mp.com/showpost.pawn?p=876854)



HydraSniper
Вход в военный самолёт со снайперской винтовкой ломает картинку (как с камерой).
funky1234
Link (http://forum.sa-mp.com/showpost.pawn?p=965644)



IsPlayerInCheckpoint
Функция возвращает неопределённое значение если до её вызова не была вызвана ни одна из функций чекпоинтов.
Y_Less (https://github.com/Y-Less/)




IsPlayerInRaceCheckpoint
Функция возвращает неопределённое значение если до её вызова не была вызвана ни одна из функций чекпоинтов.
Y_Less (https://github.com/Y-Less/)




GetPlayerWeapon
Возвращает старое значение после использования "SetPlayerArmedWeapon" для игрока в транспорте.
Y_Less (https://github.com/Y-Less/)




PutPlayerInVehicle
Если функция используется на пассажире и водителе (переброс игроков из одного автомобиля в другой), водитель не видит пассажира в новом транспорте.
leong124/Y_Less (https://github.com/Y-Less/)
Link (http://forum.sa-mp.com/showpost.pawn?p=1265965)



KEY_AIM
"KEY_AIM" не определена по умолчанию.
Y_Less (https://github.com/Y-Less/)




SetPlayerCheckpoint
При создании нового чекпоинта в случае, когда уже создан другой чекпоинт, в параметр "Float:size" нового чекпоинта передавалось значение старого чекпоинта.
ziggi (https://github.com/ziggi/)




SetPlayerRaceCheckpoint
При создании нового чекпоинта в случае, когда уже создан другой чекпоинт, в параметр "Float:size" нового чекпоинта передавалось значение старого чекпоинта.
ziggi (https://github.com/ziggi/)




TextDrawCreate
Падает при пустой строке.
wups




TextDrawSetString
Падает при пустой строке и длине, больше чем 1024.
TomTrox




AllowInteriorWeapons
Ничего не делает.
KoczkaHUN




OnPlayerEnterVehicle
Крашит других игроков когда игрок садится на недействительное место.
RyDeR`/Y_Less (https://github.com/Y-Less/)
Link (http://forum.sa-mp.com/showpost.pawn?p=1410296)



OnPlayerEnterVehicle_2
Сервер падает когда читер садится в недействительный транспорт.
im/Y_Less (https://github.com/Y-Less/)




AllowTeleport
В версии 0.3dRC9 были удалены "AllowPlayerTeleport" и "AllowAdminTeleport" в пользу "OnPlayerClickMap". Некоторые скрипты используют эти функции.
Y_Less (https://github.com/Y-Less/)




SetPlayerSpecialAction
Удаление джетпаков у игроков изменением их special action на 0 продолжает воспроизводить звук пока они не умрут.
MP2




OnDialogResponse
Читеры могут подменить ID диалога и отправить ответ на не тот диалог, который они видят в настоящее время.
Y_Less (https://github.com/Y-Less/)

0.3e RC6


GetPlayerDialog (Отключено)
Эта функция не существует.
Y_Less (https://github.com/Y-Less/)/simonepri (https://github.com/simonepri/)




PlayerDialogResponse
Диалог игрока не скрывается при перезагрузке сервера, что заставляет сервер сообщать "Warning: PlayerDialogResponse PlayerId: 0 dialog ID doesn't match last sent dialog ID".
simonepri (https://github.com/simonepri/)




SetSpawnInfo
Кикает игрока если "SpawnPlayer" была вызвана до "SetSpawnInfo".
Y_Less (https://github.com/Y-Less/)




SetPlayerSkin
Скидывает с сиденья на байках.
CyNiC
Link (http://forum.sa-mp.com/showpost.pawn?p=1756094)



HideMenuForPlayer
Падает при передаче недействительного ID меню.
Y_Less (https://github.com/Y-Less/)
Link (http://forum.sa-mp.com/showpost.pawn?p=1787297)



valstr
Падает при больших числах.
Slice (https://github.com/oscar-broman/)




fclose (Отключено)
Падает при недействительном дескрипторе.
Slice (https://github.com/oscar-broman/)




fwrite (Отключено)
Падает при недействительном дескрипторе.
Slice (https://github.com/oscar-broman/)




fread (Отключено)
Падает при недействительном дескрипторе.
Slice (https://github.com/oscar-broman/)




fputchar (Отключено)
Падает при недействительном дескрипторе.
Slice (https://github.com/oscar-broman/)




fgetchar (Отключено)
Падает при недействительном дескрипторе.
Slice (https://github.com/oscar-broman/)




fblockwrite (Отключено)
Падает при недействительном дескрипторе.
Slice (https://github.com/oscar-broman/)




fblockread (Отключено)
Падает при недействительном дескрипторе.
Slice (https://github.com/oscar-broman/)




fseek (Отключено)
Падает при недействительном дескрипторе.
Slice (https://github.com/oscar-broman/)




flength (Отключено)
Падает при недействительном дескрипторе.
Slice (https://github.com/oscar-broman/)




file_inc (Отключено)
Включает или выключает все исправления для файлов вместе (может вызвать серьёзные накладные расходы).
Y_Less (https://github.com/Y-Less/)




IsPlayerAttachedObjectSlotUsed
Не работает в OnPlayerDisconnect.
Y_Less (https://github.com/Y-Less/)
Link (http://forum.sa-mp.com/showpost.pawn?p=1794167)



SetPlayerAttachedObject
Не удаляются объекты при выключении режима.
Y_Less (https://github.com/Y-Less/)
Link (http://forum.sa-mp.com/showpost.pawn?p=1794167)



OnPlayerDeath
Клиент зависает если он умирает с применённой анимацией.
h02
Link (http://forum.sa-mp.com/showpost.pawn?p=1641144)



strins
Игнорирует параметр "maxlength", возможны падения.
Slice (https://github.com/oscar-broman/)




IsPlayerConnected
Использует только два нижних байта переданного ID.
Slice (https://github.com/oscar-broman/)




OnPlayerCommandText
ZCMD может упасть при передаче пустой строки.
Y_Less (https://github.com/Y-Less/)
Link (http://forum.sa-mp.com/showpost.pawn?p=1909511)



TrainExit
При выходе из поезда, перемещённого с помощью "PutPlayerInVehicle", камера не сбрасывается должным образом.
Terminator3/Y_Less (https://github.com/Y-Less/)




Kick
Вызов "Kick" в "OnPlayerConnect" не работает должным образом.
Y_Less (https://github.com/Y-Less/)
Link (http://forum.sa-mp.com/showpost.pawn?p=1989453)
0.3x


OnVehicleMod
Крэшит других игроков при применении недействительного компонента.
JernejL (https://github.com/JernejL/)/Y_Less (https://github.com/Y-Less/)
Link (http://forum.sa-mp.com/showpost.pawn?p=1671500)



random (Отключено)
Не работает с отрицательными значениями.
simonepri (https://github.com/simonepri/)




sleep
Утечка байтов из стека.
Y_Less (https://github.com/Y-Less/)




AddMenuItem
Падает при передаче недействительного ID меню.
Y_Less (https://github.com/Y-Less/)




SetMenuColumnHeader
Падает при передаче недействительного ID меню.
Y_Less (https://github.com/Y-Less/)




ShowMenuForPlayer
Падает при передаче недействительного ID меню.
Y_Less (https://github.com/Y-Less/)




HideMenuForPlayer
Падает при передаче недействительного ID меню.
Y_Less (https://github.com/Y-Less/)
Link (http://forum.sa-mp.com/showpost.pawn?p=1787297)



HideMenuForPlayer_2 (Отключено)
Игнорирует параметр "menuid".
Y_Less (https://github.com/Y-Less/)




DisableMenu
Падает при передаче недействительного ID меню.
Y_Less (https://github.com/Y-Less/)




DisableMenuRow
Падает при передаче недействительного ID меню.
Y_Less (https://github.com/Y-Less/)




Menus
Все исправления для функций меню.
Y_Less (https://github.com/Y-Less/)




GetPlayerMenu
Возвращает предыдущее меню когда ничего не отображается.
Y_Less (https://github.com/Y-Less/)




GetPlayerInterior
Всегда возвращает 0 для NPC.
Y_Less (https://github.com/Y-Less/)/simonepri (https://github.com/simonepri/)




ClearAnimations
Использование ClearAnimation в момент, когда игрок находится в транспорте, выбрасывает игрока из него.
simonepri (https://github.com/simonepri/)




ClearAnimations_2
Если ApplyAnimation была вызвана со значением 1 для параметра freeze, ClearAnimations не делает ничего когда анимация заканчивается.
simonepri (https://github.com/simonepri/)




KEY_CROUCH
При нажатии KEY_CROUCH на месте пассажира вы начинаете целиться; если вы повторно нажмёте KEY_CROUCH игрок не возвращается в транспорт.
simonepri (https://github.com/simonepri/)




GangZoneCreate
Ошибка зон банд на главной карте для игроков, расположенных под определёнными углами по отношению к ним.
simonepri (https://github.com/simonepri/)/Y_Less (https://github.com/Y-Less/)




SPECIAL_ACTION_PISSING
Задефайнить это.
simonepri (https://github.com/simonepri/)




IsValidVehicle
"IsValidVehicle" не определена по умолчанию.
simonepri (https://github.com/simonepri/)




ApplyAnimation
Передача недействительной библиотеки анимации в ApplyAnimation вызывает падение клиента для игроков в зоне стрима.
simonepri (https://github.com/simonepri/)




ApplyAnimation_2
Когда ApplyAnimation вызывается первый раз после появления игрока, она не работает.
simonepri (https://github.com/simonepri/)




OnPlayerSpawn
San Andreas забирает $100 у игроков.
Y_Less (https://github.com/Y-Less/)




GetGravity
"GetGravity" не определена по умолчанию.
Whitetiger (https://github.com/Whitetigerswt/)
Link (http://forum.sa-mp.com/showpost.pawn?p=1706447)



gpci
"gpci" не определена по умолчанию.
simonepri (https://github.com/simonepri/)
Link (http://pastebin.com/VQSGpbSm)



Natives
Несколько функций включено по умолчанию, это включает или отключает их все.
Y_Less (https://github.com/Y-Less/)




OnPlayerConnect
Эта функция не вызывается для игроков при включении фильтрскрипта.
Y_Less (https://github.com/Y-Less/)




OnPlayerDisconnect
Эта функция не вызывается для игроков при включении фильтрскрипта.
Y_Less (https://github.com/Y-Less/)




GameText
Некоторые стили не отображаются при указанном времени.
Y_Less (https://github.com/Y-Less/)




GameTextStyles
San Andreas имеет фиксированные стили для зон и имён транспорта, но они не включены в список стилей GameText.
Y_Less (https://github.com/Y-Less/)




HideGameText
Там нет функции "HideGameTextForXYZ".
Y_Less (https://github.com/Y-Less/)




BODYPARTS
Части тела, используемые в OnPlayer(Take/Give)Damage, не определены по умолчанию.
Whitetiger (https://github.com/Whitetigerswt/)




CAMERAMODES
Режимы камеры, используемые в GetPlayerCameraMode, не определены по умолчанию.
Whitetiger (https://github.com/Whitetigerswt/)
Link (http://forum.sa-mp.com/showpost.pawn?p=1309730)



SetPlayerCamera
Функции камеры, вызванные сразу после включения режима слежения, не работают.
Emmet_ (https://github.com/emmet-jones/)




SetPlayerTime
Использование этой функции в "OnPlayerConnect" не работает.
Emmet_ (https://github.com/emmet-jones/)




OnPlayerRequestClass
При выборе класса иногда появляются случайные дубины и бутылки.
Y_Less (https://github.com/Y-Less/)




SetPlayerColor
При использовании в OnPlayerConnect, затрагивающий игрок не увидит цвет в меню TAB.
Emmet_ (https://github.com/emmet-jones/)
Link (http://forum.sa-mp.com/showthread.pawn?t=452407)



FileMaths
Вы можете написать тарабарщину вида "File:a; ++a;".
Y_Less (https://github.com/Y-Less/)




GetPlayerWeaponData
Оружие, в котором закончились патроны, по-прежнему возвращается.
Y_Less (https://github.com/Y-Less/)
Link (http://forum.sa-mp.com/showthread.pawn?t=567400)



strcmp
Возвращает 0 если одна из строк пустая.
Y_Less (https://github.com/Y-Less/)




GetPVarString
Возвращает неправильный код символа для символов с кодом 128 и выше.
ziggi (https://github.com/ziggi/)/Mutha_X/Daniel_Cortez (https://github.com/Daniel-Cortez)
Link (http://forum.sa-mp.com/showthread.pawn?t=572724&page=11)/Link (http://pro-pawn.ru/showthread.pawn?13007)



GetSVarString
Возвращает неправильный код символа для символов с кодом 128 и выше.
ziggi (https://github.com/ziggi/)/Mutha_X/Daniel_Cortez (https://github.com/Daniel-Cortez)
Link (http://forum.sa-mp.com/showthread.pawn?t=572724&page=11)/Link (http://pro-pawn.ru/showthread.pawn?13007)



toupper
Не работает на Linux для символов с кодом 128 и выше.
ziggi (https://github.com/ziggi/)
Link (http://pro-pawn.ru/showthread.pawn?13466&p=72954#post72954)



tolower
Не работает на Linux для символов с кодом 128 и выше.
ziggi (https://github.com/ziggi/)
Link (http://pro-pawn.ru/showthread.pawn?13466&p=72954#post72954)





Настройки
Есть несколько настроек для улучшения работы этого скрипта. Задевайните эти символы как "1", прежде чем подключить fixes.inc (удалите или установите их в 0, чтобы отключить их):

FIXES_Single - У вас есть только один работающий скрипт (нет фильтрскриптов), упрощает код.
FIXES_SilentKick - Когда игрок кикается за запрещённые моды/транспорты, не отправлять им сообщение.
FIXES_Debug - Дополнительная информация в консоли сервера.


Некоторые исправления отключены по умолчанию, но вы можете их включить:
#define FIX_GetPlayerDialog 1 // Добавляет новую функцию, это не цель данного скрипта.
#define FIX_random 1 // Я не думаю, что не работающие отрицательные числа является ошибкой.
#define FIX_file_inc 1 // Это включает все "fwhatever" исправления (исправления для файлов).
#define FIX_HideMenuForPlayer_2 1 // Скрывать определённое меню, а не только текущее.


Дополнение
Файл достаточно хорошо документирован, со списком исправленных ошибок в верхней части. Если вы знаете о других ошибках, или у вас есть какие-либо решения для, было бы хорошо, если бы вы разместили их в этой теме (в соответствии с используемой структурой). Эту библиотеку также необходимо тщательное тестировать, чтобы найти ошибки в исправлениях.

Опять же, это общественный проект, если у кого есть комментарии, улучшения, критика и т.д. пожалуйста, напишите их в этой теме. Это включает в себя дополнения к исходному коду, документацию, переводы или любую другую информацию, из соответствующей области.


Другие исправления

Здесь представлено несколько других библиотек, нацеленых на исправление других серьёзных проблем:


Fixes2 (http://forum.sa-mp.com/showthread.pawn?t=571505) - Y_Less (https://github.com/Y-Less/) исправления "SetTimer", "SetTimerEx" и другие.
SQLitei (http://forum.sa-mp.com/showthread.pawn?t=303682) - Slice (https://github.com/oscar-broman/) исправления и улучшения многих SQLite функций
Timer Fix (http://forum.sa-mp.com/showthread.pawn?t=289675) - Slice (https://github.com/oscar-broman/) исправление, чтобы сделать "SetTimer" и "SetTimerEx" более точными.


Ошибки
Отправлено Y_Less (https://github.com/Y-Less/):

Это тестируемое программное обеспечение написанное небольшой командой в своё свободное время, возможно здесь есть ошибки (как и в любом программном обеспечении). Это программное обеспечение нацелено исправлять ошибки, не вызывать их, но здесь тоже могут быть ошибки.

Наиболее вероятной причиной ошибок является отключение некоторых исправлений. Некоторые исправления являются взаимозависимыми и они ДОЛЖНЫ работать даже тогда, когда связанные с ними исправления отключены, не каждая комбинация была протестирована. Есть буквально миллиарды возможных комбинаций - если вы найдёте ту, которая не компилируется или не работает, пожалуйста, сообщите нам.

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

Скачать

Последнюю версию вы всегда можете найти на GitHub (https://github.com/Open-GTO/sa-mp-fixes).

Geebrox
12.07.2016, 01:16
Использую этот инклуд, очень полезный, много багов исправляет. Однажды мучался и не мог найти проблему в PlayerTextDraw, везде открывал темы с просьбой помочь, никто ничем не смог помочь. Подключил этот инклуд, избавился не только от той проблемы... Советую)

Glant
30.07.2016, 21:40
Вопрос, связанный с FIX_GameText: В инклуде в паблике OnPlayerSpawn все геймтексты (здесь текстдрвы) почему удаляются? Почему?
К примеру, поставил я геймтекст на 10 секунд, и тут отправил игрока на спавн, и геймекст сткрылся. Если закомментировать код скрытия геймекстов при спавне, это не отразится на всем фиксе?

- - - Добавлено - - -

в Гитхабе также оставил вопросик по фиксу GetPlayerWeapon

- - - Добавлено - - -

Еще предлагаю интегрировать фикс на баг со слежкой, когда наблюдаемый игрок меняет виртуальный мир, умирает или отключается

Тема с фиксом: http://pro-pawn.ru/showthread.php?11975-%D0%A1%D0%BB%D0%B5%D0%B6%D0%BA%D0%B0-%D0%B7%D0%B0-%D0%B8%D0%B3%D1%80%D0%BE%D0%BA%D0%BE%D0%BC-%28-spectate%29

ziggi
30.07.2016, 22:15
Вопрос, связанный с FIX_GameText: В инклуде в паблике OnPlayerSpawn все геймтексты (здесь текстдрвы) почему удаляются? Почему?
К примеру, поставил я геймтекст на 10 секунд, и тут отправил игрока на спавн, и геймекст сткрылся. Если закомментировать код скрытия геймекстов при спавне, это не отразится на всем фиксе?

Работу обычных GameText проверял? Что-то мне подсказывает, что они ведут себя точно также. Потом проверю.


в Гитхабе также оставил вопросик по фиксу GetPlayerWeapon

Видел, как появится время и желание займусь.



Еще предлагаю интегрировать фикс на баг со слежкой, когда наблюдаемый игрок меняет виртуальный мир, умирает или отключается

Тема с фиксом: http://pro-pawn.ru/showthread.php?11975-%D0%A1%D0%BB%D0%B5%D0%B6%D0%BA%D0%B0-%D0%B7%D0%B0-%D0%B8%D0%B3%D1%80%D0%BE%D0%BA%D0%BE%D0%BC-%28-spectate%29

Я бы не завал это багом, так задумано в SA-MP. Но в любом случае, цель этого инклуда - это исправление ошибок, а не внедрение новых возможностей. Это одно и тоже, что и предложить внедрить античит - да, это недочёт, но это не баг.

Glant
30.07.2016, 22:40
Работу обычных GameText проверял? Что-то мне подсказывает, что они ведут себя точно также. Потом проверю.


Проверял, не исчезает

- - - Добавлено - - -



Видел, как появится время и желание займусь.


А есть какое-то представление как пофиксить? Я сам пытался написать костыль, да не получается пока.
Вот что у меня:
- Перехватывать функции GivePlayerWeapon, SetPlayerAremdWeapon, ResetPlayerWeapons, и в них хранить weaponid's в переменных, а при ResetPlayerWeapons и вовсе обнулять.
- Перехват функции GetPlayerWeapon и в ней возвращать значение из переменной

Но все упирается в одну мелочь, как я уже писал в Гитхабе, 3 вида оружия (UZI, MP-5 и TEC-9) оказываются в руках "автоматом" при посадке в авто. "Автоматом" в ковычках, потому что это не всегда так, изредка этого не происходит.


Мне сейчас нужен этот фикс, и если есть решение, прошу выложить в кратце, попробую реализовать.

ziggi
30.07.2016, 23:23
А есть какое-то представление как пофиксить? Я сам пытался написать костыль, да не получается пока.
Вот что у меня:
- Перехватывать функции GivePlayerWeapon, SetPlayerAremdWeapon, ResetPlayerWeapons, и в них хранить weaponid's в переменных, а при ResetPlayerWeapons и вовсе обнулять.
- Перехват функции GetPlayerWeapon и в ней возвращать значение из переменной

Всё верно.


Но все упирается в одну мелочь, как я уже писал в Гитхабе, 3 вида оружия (UZI, MP-5 и TEC-9) оказываются в руках "автоматом" при посадке в авто. "Автоматом" в ковычках, потому что это не всегда так, изредка этого не происходит.

Можно заставить менять оружие на автомат при посадке всегда, тогда проблем не будет.
Ещё не забудь про парашют, на сколько я помню он убирается при посадке в транспорт.

Glant
30.07.2016, 23:48
Можно заставить менять оружие на автомат при посадке всегда, тогда проблем не будет.

Блин, точняк! Сначала просканировать на наличие оружия, затем SetPlayerArmedWeapon.

vovandolg
31.07.2016, 10:43
Блин, точняк! Сначала просканировать на наличие оружия, затем SetPlayerArmedWeapon.
Таймер только придется сделать, так как все функции быстро срабатывают, а оружие может появится через ~1 сек, плюс в GivePlayerWeapon что то подобное, чтоб водителям кидало за плечи, а не в руки...

Glant
31.07.2016, 18:04
таймер не нужен, оружие само по себе оказывается сразу же

Glant
31.07.2016, 20:13
Фикс на GetPlayerWeapon (точнее будет сказать доработал, ибо пока был фикс только на SetPlayerArmedWeapon в машине:

Для фикса SetPlayerArmedWeapon в перехватчике этой фукнции записывали weaponid в переменные лишь в том случае, если игрок находится в транспорте. А когда игрок выходил, то заносили значение -1. Такое же значение устанавливалось по дефолту при подключении игрока. На это и обращал внимание пепрехватчик GetPlayerWeapon: если в переменной стоит -1, то возвращать оригинальную функцию, иначе значение из нашей переменной.
Мой фикс придерживается этого же принципа, и я всего лишь дополнил:




stock FIXES_GivePlayerWeapon(playerid, weaponid, ammo)
{
new vid = GetPlayerVehicleID;



if(vid)
{
// код другого фикса

#if FIX_GetPlayerWeapon
#if FIXES_Single
FIXES_gsPlayerWeapon[playerid] = weaponid;
#else
SetPVarInt(playerid, FIXES_pvarPlayerWeapon, weaponid);
#endif
#endif
}
}


// Новый перехватчик
#if defined _ALS_ResetPlayerWeapons
#error _ALS_ResetPlayerWeapons defined
#endif
native BAD_ResetPlayerWeapons(playerid) = ResetPlayerWeapons;

stock FIXES_ResetPlayerWeapons(playerid)
{
if(IsPlayerInAnyVehicle(playerid))
{
#if FIXES_Single
FIXES_gsPlayerWeapon[playerid] = 0;
#else
SetPVarInt(playerid, FIXES_pvarPlayerWeapon, 0);
#endif
}

return ResetPlayerWeapons(playerid);
}
#define _ALS_ResetPlayerWeapons
#define ResetPlayerWeapons FIXES_ResetPlayerWeapons



public OnPlayerStateChange(playerid, newstate, oldstate)
{
// код другого фикса

// ====================
// BEGIN: GetPlayerWeapon
// ====================
#if FIX_GetPlayerWeapon
if(newstate == PLAYER_STATE_DRIVER)
{
new weapon, ammo;
// Micro SMG/Uzi, MP5, TEC-9 are in 4th slot
GetPlayerWeaponData(playerid, 4, weapon, ammo);
if(weapon)
{
SetPlayerArmedWeapon(playerid, weapon);

#if defined FIXES_Single
FIXES_gsPlayerWeapon[playerid] = weapon;
#else
SetPVarInt(playerid, FIXES_pvarPlayerWeapon, weaponid);
#endif
}
}
#endif
// ====================
// END: GetPlayerWeapon
// ====================
}






P.S С парашютом заморачиваться нет необходимости, так как он убирается лишь когда игрок осознанно садится, и за это время кулак (id 0) запоминается само. А при неосознанном парашют "остается в руках".

ziggi
31.07.2016, 21:40
Glant, добавил (https://github.com/ziggi/sa-mp-fixes/commit/52b4c9bdb85ed8b2e55b8d6b0b30eddaaca031b6). Но лучше такие вещи оформлять в виде Pull Request.
P.S. Ты забыл про PLAYER_STATE_PASSENGER.

Glant
31.07.2016, 22:31
Glant, добавил (https://github.com/ziggi/sa-mp-fixes/commit/52b4c9bdb85ed8b2e55b8d6b0b30eddaaca031b6). Но лучше такие вещи оформлять в виде Pull Request.


Новичок пока в Гитхабе :)




P.S. Ты забыл про PLAYER_STATE_PASSENGER.


Для какого случая? Для выдачи оружия при посадке?
Оружие выдается автоматом именно для водителя, PLAYER_STATE_PASSENGER не нужен

vovandolg
31.07.2016, 22:46
Так то по сути зачем отбирать оружие у пассажиров, они в нормальной позе как положено целятся там, это водила у нас в багоюзера(то ли читера) превращается...

ziggi
01.08.2016, 00:08
Для какого случая? Для выдачи оружия при посадке?
Оружие выдается автоматом именно для водителя, PLAYER_STATE_PASSENGER не нужен

GetPlayerWeapon работает для пассажиров нормально?

Glant
01.08.2016, 00:41
GetPlayerWeapon работает для пассажиров нормально?

А причем тут это?
Мы ведь записываем иды оружия в перехватах при условии, что игрок в транспорте, неважно на каком месте.

ziggi
01.08.2016, 01:13
А причем тут это?
Мы ведь записываем иды оружия в перехватах при условии, что игрок в транспорте, неважно на каком месте.

Да я и не про это, я про то, что разве оружие при посадке на пассажирское сиденье не меняется? Просто я не помню.

HarrWe
01.08.2016, 09:34
То чувство когда только сегодня узнал что подменить ID диалога уже нельзя :search:

Glant
01.08.2016, 15:31
Да я и не про это, я про то, что разве оружие при посадке на пассажирское сиденье не меняется? Просто я не помню.

Нет, меняется только для водителя

Igor_Stalker
10.08.2016, 14:12
Подключил инклуд ,появилась рекурсия и ошибки в инклуде CRP
Ошибки

C:\Users\11\Desktop\server samp 0.3.7\server\pawno\include\crp.inc(143) : warning 201: redefinition of constant/macro (symbol "GameTextForAll")
C:\Users\11\Desktop\server samp 0.3.7\server\pawno\include\crp.inc(144) : warning 201: redefinition of constant/macro (symbol "GameTextForPlayer")
C:\Users\11\Desktop\server samp 0.3.7\server\pawno\include\crp.inc(145) : warning 201: redefinition of constant/macro (symbol "CreateMenu")
C:\Users\11\Desktop\server samp 0.3.7\server\pawno\include\crp.inc(146) : warning 201: redefinition of constant/macro (symbol "AddMenuItem")
C:\Users\11\Desktop\server samp 0.3.7\server\pawno\include\crp.inc(147) : warning 201: redefinition of constant/macro (symbol "SetMenuColumnHeader")
C:\Users\11\Desktop\server samp 0.3.7\server\pawno\include\crp.inc(149) : warning 201: redefinition of constant/macro (symbol "TextDrawSetString")
Строки

#define GameTextForAll GameTextForAllRus
#define GameTextForPlayer GameTextForPlayerRus
#define CreateMenu CreateMenuRus
#define AddMenuItem AddMenuItemRus
#define SetMenuColumnHeader SetMenuColumnHeaderRus
#define TextDrawCreate TextDrawCreateRus
#define TextDrawSetString TextDrawSetStringRus

VVWVV
10.08.2016, 14:24
Подключил инклуд ,появилась рекурсия и ошибки в инклуде CRP
Ошибки

C:\Users\11\Desktop\server samp 0.3.7\server\pawno\include\crp.inc(143) : warning 201: redefinition of constant/macro (symbol "GameTextForAll")
C:\Users\11\Desktop\server samp 0.3.7\server\pawno\include\crp.inc(144) : warning 201: redefinition of constant/macro (symbol "GameTextForPlayer")
C:\Users\11\Desktop\server samp 0.3.7\server\pawno\include\crp.inc(145) : warning 201: redefinition of constant/macro (symbol "CreateMenu")
C:\Users\11\Desktop\server samp 0.3.7\server\pawno\include\crp.inc(146) : warning 201: redefinition of constant/macro (symbol "AddMenuItem")
C:\Users\11\Desktop\server samp 0.3.7\server\pawno\include\crp.inc(147) : warning 201: redefinition of constant/macro (symbol "SetMenuColumnHeader")
C:\Users\11\Desktop\server samp 0.3.7\server\pawno\include\crp.inc(149) : warning 201: redefinition of constant/macro (symbol "TextDrawSetString")
Строки

#define GameTextForAll GameTextForAllRus
#define GameTextForPlayer GameTextForPlayerRus
#define CreateMenu CreateMenuRus
#define AddMenuItem AddMenuItemRus
#define SetMenuColumnHeader SetMenuColumnHeaderRus
#define TextDrawCreate TextDrawCreateRus
#define TextDrawSetString TextDrawSetStringRus

Лучше не использовать библиотеку crp, т.к. в ней неправильно перехвачены функции.

Igor_Stalker
10.08.2016, 23:20
Лучше не использовать библиотеку crp, т.к. в ней неправильно перехвачены функции.

Окей,а с рекурсией что делать?При включении инклуда сразу появляется,при выключении рекурсии нет.

VVWVV
10.08.2016, 23:48
Окей,а с рекурсией что делать?При включении инклуда сразу появляется,при выключении рекурсии нет.

К сожалению, но я не видел вашего инклюда, поэтому не могу указать на вашу проблему.

Igor_Stalker
11.08.2016, 10:32
К сожалению, но я не видел вашего инклюда, поэтому не могу указать на вашу проблему.

Вы наверное не так поняли,рекурсия в моде возникает из-за инклуда fixes из этой темы.

Glant
12.08.2016, 12:38
Вы наверное не так поняли,рекурсия в моде возникает из-за инклуда fixes из этой темы.

Да, кстати, очень актуально. Сам плагин CRP старый, и похоже автор не знал в то время про перехваты функций, и задефайнил самым обычным способом, из-за чего и возникают подобные ошибки.
Это во-первых, во-вторых там нет поддержки для PlayerTextDraw's, из-за того, что они появились в 0.3e в 2012 году, тогда как плагин сам 2011.

Решение, что сделал у себя:

1. Закомментируй строки


#define GameTextForAll GameTextForAllRus
#define GameTextForPlayer GameTextForPlayerRus
#define CreateMenu CreateMenuRus
#define AddMenuItem AddMenuItemRus
#define SetMenuColumnHeader SetMenuColumnHeaderRus
#define TextDrawCreate TextDrawCreateRus
#define TextDrawSetString TextDrawSetStringRus
#define CreatePlayerTextDraw CreatePlayerTextDrawRus
#define PlayerTextDrawSetString PlayerTextDrawSetStringRus



2.Сделать перехватички для всех нативных функий

Пример с GameTextForAll:


stock crp_GameTextForAll(string[], time, style)
{
CRP(string, buffer);
return GameTextForAll(buffer, time, style);
}
#if defined _ALS_GameTextForAll
#undef GameTextForAll
#else
#define _ALS_GameTextForAll
#endif
#define GameTextForAll crp_GameTextForAll


Точно таким же образом и для всех остальных функций

3. Добавить перехватчики для CreatePlayerTextDraw() и PlayerTextDrawSetString():



stock PlayerText:crp_CreatePlayerTextDraw(playerid, Float:x, Float:y, text[])
{
CRP(text, buffer);
return CreatePlayerTextDraw(playerid, x, y, buffer);
}
#if defined _ALS_CreatePlayerTextDraw
#undef CreatePlayerTextDraw
#else
#define _ALS_CreatePlayerTextDraw
#endif
#define CreatePlayerTextDraw crp_CreatePlayerTextDraw

// -------------------------------------------------------------------------------------*-

stock crp_PlayerTextDrawSetString(playerid, PlayerText:text, string[])
{
CRP(string, buffer);
return PlayerTextDrawSetString(playerid, text, buffer);
}
#if defined _ALS_PlayerTextDrawSetString
#undef PlayerTextDrawSetString
#else
#define _ALS_PlayerTextDrawSetString
#endif
#define PlayerTextDrawSetString crp_PlayerTextDrawSetString

Igor_Stalker
12.08.2016, 15:40
Я спрашивал,почему возникает рекурсия из-за инклуда fixes!

ziggi
12.08.2016, 19:50
Я спрашивал,почему возникает рекурсия из-за инклуда fixes!

Наверное потому, что где-то в fixes используется рекурсия, ничего страшного в этом нет.

vasyok28
12.08.2016, 23:07
Я спрашивал,почему возникает рекурсия из-за инклуда fixes!

Я только в одном месте нашел баг, если юзать SetPlayerSkin в OnPlayerKeyStateChange, тогда будет и рекурсия

TheMallard
13.08.2016, 11:03
Чем она мешает, вы что, все помешались на этой рекурсии?!

Daniel_Cortez
13.08.2016, 12:42
Чем она мешает
Тем, что она не позволяет компилятору вывести статистику по использованию стека? Особенно, когда есть способы сделать рекурсию, не повлияв на показания компилятора.

vovandolg
13.08.2016, 16:13
А ещё иногда такое бывает когда пластинку заедает и она начинает повторятся, тем самым сервер всё больше и больше нагружается, но это уже быдлокоды такое исполняют.

ziggi
14.08.2016, 03:04
Я только в одном месте нашел баг, если юзать SetPlayerSkin в OnPlayerKeyStateChange, тогда будет и рекурсия

Спасибо, исправил.

Redsan
29.10.2016, 16:39
Работа функции IsPlayerAttachedObjectSlotUsed в OnPlayerDisconnect была исправлена в версии SA-MP 0.3c.

Код для теста:

#include <a_samp>

main()
{
print("\n----------------------------------");
print(" Blank Gamemode by your name here");
print("----------------------------------\n");
}

public OnGameModeInit()
{
// Don't use these lines if it's a filterscript
SetGameModeText("Blank Script");
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
return 1;
}

public OnPlayerRequestClass(playerid, classid)
{
SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
for (new i = 0; i != MAX_PLAYER_ATTACHED_OBJECTS; ++i)
{
new str[64];
format(str, sizeof (str), "%d: %d", i, IsPlayerAttachedObjectSlotUsed(playerid, i));
print(str);
}
return 1;
}

public OnPlayerSpawn(playerid)
{
SetPlayerAttachedObject(playerid, 3, 1598, 2);
return 1;
}


Лог сервера:


----------
Loaded log file: "server_log.txt".
----------

SA-MP Dedicated Server
----------------------
v0.3c, (C)2005-2010 SA-MP Team

[16:36:44]
[16:36:44] Server Plugins
[16:36:44] --------------
[16:36:44] Loaded 0 plugins.

[16:36:44]
[16:36:44] Filter Scripts
[16:36:44] ---------------
[16:36:44] Loaded 0 filter scripts.

[16:36:44]
----------------------------------
[16:36:44] Blank Gamemode by your name here
[16:36:44] ----------------------------------

[16:36:44] Number of vehicle models: 0
[16:37:05] Incoming connection: 127.0.0.1:50583
[16:37:05] [join] Redsan has joined the server (0:127.0.0.1)
[16:37:10] 0: 0
[16:37:10] 1: 0
[16:37:10] 2: 0
[16:37:10] 3: 1
[16:37:10] 4: 0
[16:37:10] [part] Redsan has left the server (0:1)


Баг был в какой-то RC версии 0.3с.

ziggi
29.10.2016, 23:58
Работа функции IsPlayerAttachedObjectSlotUsed в OnPlayerDisconnect была исправлена в версии SA-MP 0.3c.

Код для теста:

#include <a_samp>

main()
{
print("\n----------------------------------");
print(" Blank Gamemode by your name here");
print("----------------------------------\n");
}

public OnGameModeInit()
{
// Don't use these lines if it's a filterscript
SetGameModeText("Blank Script");
AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
return 1;
}

public OnPlayerRequestClass(playerid, classid)
{
SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746);
SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746);
return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
for (new i = 0; i != MAX_PLAYER_ATTACHED_OBJECTS; ++i)
{
new str[64];
format(str, sizeof (str), "%d: %d", i, IsPlayerAttachedObjectSlotUsed(playerid, i));
print(str);
}
return 1;
}

public OnPlayerSpawn(playerid)
{
SetPlayerAttachedObject(playerid, 3, 1598, 2);
return 1;
}


Лог сервера:


----------
Loaded log file: "server_log.txt".
----------

SA-MP Dedicated Server
----------------------
v0.3c, (C)2005-2010 SA-MP Team

[16:36:44]
[16:36:44] Server Plugins
[16:36:44] --------------
[16:36:44] Loaded 0 plugins.

[16:36:44]
[16:36:44] Filter Scripts
[16:36:44] ---------------
[16:36:44] Loaded 0 filter scripts.

[16:36:44]
----------------------------------
[16:36:44] Blank Gamemode by your name here
[16:36:44] ----------------------------------

[16:36:44] Number of vehicle models: 0
[16:37:05] Incoming connection: 127.0.0.1:50583
[16:37:05] [join] Redsan has joined the server (0:127.0.0.1)
[16:37:10] 0: 0
[16:37:10] 1: 0
[16:37:10] 2: 0
[16:37:10] 3: 1
[16:37:10] 4: 0
[16:37:10] [part] Redsan has left the server (0:1)


Баг был в какой-то RC версии 0.3с.

Спасибо, поправил (то есть удалил).

Daniel_Cortez
28.11.2016, 08:16
По поводу последнего коммита (https://github.com/Open-GTO/sa-mp-fixes/commit/fd1d27083f5fedb8c7d9eb5a1c88cdc2bb0bdf49): слово "очки" переводится на английский как "goggles", а не "googles". И названия констант оружия (_FIXES_WEAPON_NIGHT_VIS_GOGGLES, _FIXES_WEAPON_THERMAL_GOGGLES) как бы тоже на это намекают.

ziggi
29.11.2016, 00:09
По поводу последнего коммита (https://github.com/Open-GTO/sa-mp-fixes/commit/fd1d27083f5fedb8c7d9eb5a1c88cdc2bb0bdf49): слово "очки" переводится на английский как "goggles", а не "googles". И названия констант оружия (_FIXES_WEAPON_NIGHT_VIS_GOGGLES, _FIXES_WEAPON_THERMAL_GOGGLES) как бы тоже на это намекают.

:) Поправил.

TheMallard
30.11.2016, 17:32
По поводу последнего коммита (https://github.com/Open-GTO/sa-mp-fixes/commit/fd1d27083f5fedb8c7d9eb5a1c88cdc2bb0bdf49): слово "очки" переводится на английский как "goggles", а не "googles". И названия констант оружия (_FIXES_WEAPON_NIGHT_VIS_GOGGLES, _FIXES_WEAPON_THERMAL_GOGGLES) как бы тоже на это намекают.

https://en.wikipedia.org/wiki/Goggles
http://www.thefreedictionary.com/Night-vision+goggles

Mr_LemoneZ
04.01.2017, 14:17
После подключения данного инклуда strlen возращает единицу, если в тексте нет ни одного символа. Исправьте, пожалуйста. :)

Daniel_Cortez
04.01.2017, 16:18
После подключения данного инклуда strlen возращает единицу, если в тексте нет ни одного символа. Исправьте, пожалуйста. :)
Проблема явно где-то в другом месте, т.к. strlen не перехватывается в fixes.inc (в этой функции нечего "исправлять").

Mr_LemoneZ
04.01.2017, 16:36
Проблема явно где-то в другом месте, т.к. strlen не перехватывается в fixes.inc (в этой функции нечего "исправлять").

Странно, как только я отключаю инклуд всё становится на свои места...
Кстати, в шапке темы говорится, что «Некоторые исправления являются взаимозависимыми». Или я чего-то не понимаю?

DeimoS
04.01.2017, 16:39
Странно, как только я отключаю инклуд всё становится на свои места...
Кстати, в шапке темы говорится, что «Некоторые исправления являются взаимозависимыми». Или я чего-то не понимаю?

Исходный код инклуда, как бы это странно ни звучало, открыт, так что можешь сам удостовериться, что strlen там никак не правится.

Покажи примеры того, где strlen возвращает 1

Mr_LemoneZ
04.01.2017, 16:45
Покажи примеры того, где strlen возвращает 1


В каллбэке OnDialogResponse:

strlen(inputtext)

ziggi
04.01.2017, 19:16
В каллбэке OnDialogResponse:

strlen(inputtext)

И правда, OnDialogResponse перехватывается и при пустом inputtext туда зачем-то передаётся \1. Поправил.

Daniel_Cortez
04.01.2017, 20:11
И правда, OnDialogResponse перехватывается и при пустом inputtext туда зачем-то передаётся \1.
Это сделано специально, чтобы inputtext можно было передавать через CallLocalFunction (при пустой строке происходит краш, как в ZCMD) для всяких диалоговых процессоров, например. Та же строка используется в FIXES_OnPlayerCommandText.

ziggi
04.01.2017, 20:16
Это сделано специально, чтобы inputtext можно было передавать через CallLocalFunction (при пустой строке происходит краш, как в ZCMD) для всяких диалоговых процессоров, например. Та же строка используется в FIXES_OnPlayerCommandText.

Да, но там не используется CallLocalFunction.

Daniel_Cortez
04.01.2017, 20:39
Да, но там не используется CallLocalFunction.
В посте выше я не просто так привёл пример с ZCMD. CallLocalFunction может вызываться в пользовательском коде - на это, очевидно, и был расчёт.

ziggi
04.01.2017, 23:36
В посте выше я не просто так привёл пример с ZCMD. CallLocalFunction может вызываться в пользовательском коде - на это, очевидно, и был расчёт.

Ну где CallLocalFunction будет вызываться, там и нужно делать такое. Скорее всего раньше там был CallLocalFunction, затем всё переделали на обычный вызов функции, а на это внимания не обратили.

UPD: да, так и было: https://github.com/Open-GTO/sa-mp-fixes/blob/d4bd68bef034c1a46409ef817f8ebe716c1582af/fixes.inc#L4039-L4046


if (inputtext[0])
{
return FIXES_CALL_CALLBACK_2(OnDialogResponse, 1, FIXES_gscSpec@iiiis, playerid, dialogid, response, listitem, inputtext);
}
else
{
return FIXES_CALL_CALLBACK_2(OnDialogResponse, 1, FIXES_gscSpec@iiiis, playerid, dialogid, response, listitem, FIXES_gscNULL);
}

#define FIXES_CALL_CALLBACK_2(%0On%1,%2,%3) ((FIXES_gsCallbackHooks2&E_FIXES_On%1)?(CallLocalFunction(FIXES_gsc%1,%3)):(%2))

Daniel_Cortez
05.01.2017, 10:12
Ну где CallLocalFunction будет вызываться, там и нужно делать такое. Скорее всего раньше там был CallLocalFunction, затем всё переделали на обычный вызов функции, а на это внимания не обратили.

UPD: да, так и было: https://github.com/Open-GTO/sa-mp-fixes/blob/d4bd68bef034c1a46409ef817f8ebe716c1582af/fixes.inc#L4039-L4046


if (inputtext[0])
{
return FIXES_CALL_CALLBACK_2(OnDialogResponse, 1, FIXES_gscSpec@iiiis, playerid, dialogid, response, listitem, inputtext);
}
else
{
return FIXES_CALL_CALLBACK_2(OnDialogResponse, 1, FIXES_gscSpec@iiiis, playerid, dialogid, response, listitem, FIXES_gscNULL);
}

#define FIXES_CALL_CALLBACK_2(%0On%1,%2,%3) ((FIXES_gsCallbackHooks2&E_FIXES_On%1)?(CallLocalFunction(FIXES_gsc%1,%3)):(%2))
Тогда следовало бы по тому же принципу удалить "\1" из перехвата OnPlayerCommandText (что в принципе сделает ненужным весь перехват). Или вернуть "\1" в OnDialogResponse и перехватить функцию strlen, чтобы она считала "\1" пустой строкой.

koberman
30.03.2017, 08:14
fixes.inc(3528) : fatal error 111: user error: _ALS_OnFilterScriptInit defined
Помогите решить пожалуйста, #undef и #else define не помогают

ziggi
30.03.2017, 09:41
fixes.inc(3528) : fatal error 111: user error: _ALS_OnFilterScriptInit defined
Помогите решить пожалуйста, #undef и #else define не помогают

fixes.inc нужно подключать сразу после a_samp.

koberman
30.03.2017, 10:55
fixes.inc нужно подключать сразу после a_samp.

Спасибо ziggi)

koberman
28.05.2017, 16:53
error 084: state conflict: one of the states is already assigned to another implementation (symbol "FIXES_OnPlayerExitVehicle")
Ругается на строку с самим пабликом.

ziggi
28.05.2017, 19:03
error 084: state conflict: one of the states is already assigned to another implementation (symbol "FIXES_OnPlayerExitVehicle")
Ругается на строку с самим пабликом.
...

fixes.inc нужно подключать сразу после a_samp.

koberman
29.05.2017, 18:12
...

Ну так оно и подключено после. Было все нормально, после я решил использовать этот паблик и у меня полезла ошибка на строку с самим пабликом. Если в паблике ничего не будет - все нормально.

Daniel_Cortez
29.05.2017, 18:22
Ну так оно и подключено после. Было все нормально, после я решил использовать этот паблик и у меня полезла ошибка на строку с самим пабликом. Если в паблике ничего не будет - все нормально.
Какие ещё инклуды подключаете? Скорее всего, один из них использует устаревший метод перехвата функций с помощью автоматонов (ALSv3).

koberman
30.05.2017, 13:32
Какие ещё инклуды подключаете? Скорее всего, один из них использует устаревший метод перехвата функций с помощью автоматонов (ALSv3).


#include <a_samp>
#include <fixes>
#include <fix>
#include <streamer>
#include <a_actor>
#include <a_mysql>
#include <sscanf2>
#include <dc_cmd>
#include <crashdetect>
#include <mxdate>
#include <foreach>
#include <mapfix>
Да вроде стандартный список инклудов.

vovandolg
01.06.2017, 23:51
#include <a_samp>
#include <fixes>
#include <fix>
#include <streamer>
#include <a_actor>
#include <a_mysql>
#include <sscanf2>
#include <dc_cmd>
#include <crashdetect>
#include <mxdate>
#include <foreach>
#include <mapfix>
Да вроде стандартный список инклудов.

Пробуй отключай по одному каждый и смотри когда ошибка исчезнет =)

DeimoS
02.06.2017, 01:30
Пробуй отключай по одному каждый и смотри когда ошибка исчезнет =)

Скорее всего отключение одного из инклудов будет вызывать кучу ошибок :)
Гораздо проще скомпилировать мод с параметром "-l" и потом посмотреть содержимое файла ".lst", в котором будет как содержимое мода, так и содержимое инклудов. И уже там искать все OnPlayerExitVehicle

vasyok28
10.07.2017, 01:26
Такссс такой вопрос, может у кого было, чёто сложно врубиться из-за чего такое происходит, в инклюде есть перехват OnPlayerUpdate и в другом инклюде перехватываю еще раз OnPlayerUpdate и замечаю что иногда OnPlayerUpdate в другом инклюде перестает выполняться и не только в инклюде но и в самом моде. Так понял работает только в fixes, OnPlayerUpdate.

ziggi
10.07.2017, 12:31
Такссс такой вопрос, может у кого было, чёто сложно врубиться из-за чего такое происходит, в инклюде есть перехват OnPlayerUpdate и в другом инклюде перехватываю еще раз OnPlayerUpdate и замечаю что иногда OnPlayerUpdate в другом инклюде перестает выполняться и не только в инклюде но и в самом моде. Так понял работает только в fixes, OnPlayerUpdate.

Если ты используешь FS, то попробуй их скомпилировать с fixes.inc тоже. И да, все скрипты должны быть скомпилированы в режиме
#define FIXES_Single 0

vasyok28
10.07.2017, 15:50
Если ты используешь FS, то попробуй их скомпилировать с fixes.inc тоже. И да, все скрипты должны быть скомпилированы в режиме
#define FIXES_Single 0

Нет не использую скрипт, обычное инклюд

Competent
26.09.2017, 16:24
Шикарный инклуд. Использую давно, очень помог в плане таймеров и анимаций.
Код оставляет желать лучшего.

VVWVV
26.09.2017, 17:03
Шикарный инклуд. Использую давно, очень помог в плане таймеров и анимаций.
Код оставляет желать лучшего.

А что с кодом то?

ziggi
26.09.2017, 17:33
Шикарный инклуд. Использую давно, очень помог в плане таймеров и анимаций.
Код оставляет желать лучшего.

Процесс разработки полностью открытый, улучшайте код и отправляйте Pull Request. А по коду - покажи, что тебе не нравится и я попробую объяснить почему тот код был написан именно таким образом.

Competent
26.09.2017, 17:34
А что с кодом то?


Процесс разработки полностью открытый, улучшайте код и отправляйте Pull Request. А по коду - покажи, что тебе не нравится и я попробую объяснить почему тот код был написан именно таким образом.

Хороший код имею ввиду

SooBad
26.09.2017, 17:38
Так фраза "оставляет желать лучшего" - это намек на дальнейшее совершенствование, а не на текущую превосходность чего-либо.

Competent
26.09.2017, 18:43
Так фраза "оставляет желать лучшего" - это намек на дальнейшее совершенствование, а не на текущую превосходность чего-либо.

В моём понимании это иначе и для меня этот код оставляет желать лучшего.
Пардоньте.

ziggi
26.09.2017, 18:51
В моём понимании это иначе и для меня этот код оставляет желать лучшего.
Пардоньте.

http://gramota.ru/biblio/magazines/rr/28_551

В современном русском литературном языке есть фразеологическое выражение со значением 'недостаточно хорошо, неудовлетворительно, не соответствует определенным требованиям’ — оставляет желать лучшего. В толковых словарях не отмечается, что это выражение может употребляться с отрицанием не – и тогда оно означает ‘превосходно, отвечает всем требованиям', например: «А вот люди, составлявшие костяк дивизии, были отличные, и их политико-моральное состояние не оставляло желать лучшего».

Competent
26.09.2017, 19:06
http://gramota.ru/biblio/magazines/rr/28_551

В современном русском литературном языке есть фразеологическое выражение со значением 'недостаточно хорошо, неудовлетворительно, не соответствует определенным требованиям’ — оставляет желать лучшего. В толковых словарях не отмечается, что это выражение может употребляться с отрицанием не – и тогда оно означает ‘превосходно, отвечает всем требованиям', например: «А вот люди, составлявшие костяк дивизии, были отличные, и их политико-моральное состояние не оставляло желать лучшего».

Ну началось, мне так по душе и это моё сугубо личное. Но всё же, замечания зря не делают, приму к сведению что у вас тут так не принято :pardon: , пардоньте.

SooBad
26.09.2017, 19:10
Так это у всех так принято, а не только у нас)
Зигги даже практический пример привел.

Алинка
03.10.2017, 01:17
А для samp 0.3-r2 все будет работать?

ziggi
03.10.2017, 11:00
А для samp 0.3-r2 все будет работать?

Уточни версию, указанной тобой версии не существует. Но если ты имел ввиду 0.3.7 R2, то да, всё будет работать.

Алинка
03.10.2017, 21:53
Уточни версию, указанной тобой версии не существует. Но если ты имел ввиду 0.3.7 R2, то да, всё будет работать.

Нет, я имела ввиду 0.3e-R2 вот

ziggi
03.10.2017, 22:16
Нет, я имела ввиду 0.3e-R2 вот

Теоретически всё дожно работать, но, если возникнут проблемы с одним из исправлений, то это конкретное исправление всегда можно отключить (как это сделать написано в шапке темы).

Kovshevoy
08.12.2017, 12:35
День добрый, из-за чего может быть ошибочка?

* FIXES_PRINTF (GM):

********************************************************************************
* Could not open "DANGEROUS_SERVER_ROOT/server.cfg". Make sure your server is *
* configured to allow server root access. Either via: *
* *
* https://github.com/Misiur/YSI/raw/master/links.rar *
* *
* Or (Windows): *
* *
* mklink /J DANGEROUS_SERVER_ROOT .. *
* *
* Or (Linux): *
* *
* ln -s .. DANGEROUS_SERVER_ROOT *
********************************************************************************

*** fixes.inc error: Could not load RconCommand/ClientCheckResponse fix FS.

ziggi
08.12.2017, 18:46
День добрый, из-за чего может быть ошибочка?

* FIXES_PRINTF (GM):

********************************************************************************
* Could not open "DANGEROUS_SERVER_ROOT/server.cfg". Make sure your server is *
* configured to allow server root access. Either via: *
* *
* https://github.com/Misiur/YSI/raw/master/links.rar *
* *
* Or (Windows): *
* *
* mklink /J DANGEROUS_SERVER_ROOT .. *
* *
* Or (Linux): *
* *
* ln -s .. DANGEROUS_SERVER_ROOT *
********************************************************************************

*** fixes.inc error: Could not load RconCommand/ClientCheckResponse fix FS.

Причина указана в сообщении: сервер не сконфигурирован на получение доступа из скрипта к server.cfg, и показано как это сделать.
Вторая ошибка появляется потому, что скрипт не смог создать файл scriptfiles/callbackfix.amx.

UPD: Добавил возможность отключить сообщение об ошибке и добавил возможность отключить фиксы каллбеков с помощью "#define FIX_Callbacks 0".

Outsider
20.12.2017, 15:50
C:\Users\nekorides\Desktop\pawno\include\fixes.inc(1805) : error 038: extra characters on line

1805 #pragma option -(+

В пустом моде. Если строку закомментить, то все ок. Она вообще для чего?

ziggi
20.12.2017, 18:41
C:\Users\nekorides\Desktop\pawno\include\fixes.inc(1805) : error 038: extra characters on line

1805 #pragma option -(+

В пустом моде. Если строку закомментить, то все ок. Она вообще для чего?

Включает скобки в принудительном порядке. Обнови компилятор от Zeex, похоже ты используешь какую-то старую версию.

Daniel_Cortez
20.12.2017, 21:25
C:\Users\nekorides\Desktop\pawno\include\fixes.inc(1805) : error 038: extra characters on line

1805 #pragma option -(+

В пустом моде. Если строку закомментить, то все ок. Она вообще для чего?


Включает скобки в принудительном порядке. Обнови компилятор от Zeex, похоже ты используешь какую-то старую версию.

Что интересно, до этой строки с помощью "#pragma disable" отключается варнинг 207 (unknown #pragma), но, видимо, компилятор не игнорирует символы "-(+" после неизвестной директивы "#pragma option" - отсюда и ошибка. Не похоже, чтобы так и было задумано.
По-хорошему, стоило бы добавить вокруг "#pragma option -(+" ещё одну пару #if/#endif с проверкой версии компилятора, чтобы убедиться, что "#pragma option" поддерживается, примерно так:


#if defined __PawnBuild && __PawnBuild >= 4
#pragma option -(+
#endif

Outsider
20.12.2017, 21:59
Чето я не нашел 4 версии.

Алсо, блин. Последнюю версию поставил - компилит мгновенно. Че я раньше не обновился.

ziggi
23.12.2017, 09:36
Что интересно, до этой строки с помощью "#pragma disable" отключается варнинг 207 (unknown #pragma), но, видимо, компилятор не игнорирует символы "-(+" после неизвестной директивы "#pragma option" - отсюда и ошибка. Не похоже, чтобы так и было задумано.
По-хорошему, стоило бы добавить вокруг "#pragma option -(+" ещё одну пару #if/#endif с проверкой версии компилятора, чтобы убедиться, что "#pragma option" поддерживается, примерно так:


#if defined __PawnBuild && __PawnBuild >= 4
#pragma option -(+
#endif


Спасибо, поправил.

Kovshevoy
27.01.2018, 20:19
#include <a_samp>
#define FIXES_Single 1
#define FIXES_ServerVarMsg 0
#include <fixes>

Юзаю вот так, при запуске выдает Script[gamemodes/new.amx]: Run time error 19: "File or function is not found". Если отключить инклуд и два дефайна выше - все работает. При отключении FIXED_ServerVarMsg - компилятор вылетает.

ziggi
28.01.2018, 02:15
#include <a_samp>
#define FIXES_Single 1
#define FIXES_ServerVarMsg 0
#include <fixes>

Юзаю вот так, при запуске выдает Script[gamemodes/new.amx]: Run time error 19: "File or function is not found". Если отключить инклуд и два дефайна выше - все работает. При отключении FIXED_ServerVarMsg - компилятор вылетает.

Подключи последнюю версию crashdetect и покажи, какие именно функции сервер не находит.
И какой компилятор используешь?

Kovshevoy
28.01.2018, 02:36
Подключи последнюю версию crashdetect и покажи, какие именно функции сервер не находит.
И какой компилятор используешь?

Использую русифицированный, от Тракера и Кортеза.

Skyline
02.07.2018, 23:16
Решил обновить, скачал и ошибки:

error 017: undefined symbol "_ALS"
error 029: invalid expression, assumed zero
error 017: undefined symbol "_ALS_go"
fatal error 107: too many error messages on one line

Nexius_Tailer
03.07.2018, 17:21
Решил обновить, скачал и ошибки:

error 017: undefined symbol "_ALS"
error 029: invalid expression, assumed zero
error 017: undefined symbol "_ALS_go"
fatal error 107: too many error messages on one line
Скорее всего перед ним что-то из инклудов подключаешь, которые также хукают те функции, которые хукает fixes.

Skyline
05.07.2018, 08:31
Скорее всего перед ним что-то из инклудов подключаешь, которые также хукают те функции, которые хукает fixes.

Да нет вроде, после a_samp подключаю...С старой версией норм, а вот последнюю скачал, такие ошибки.

Pro_Coder
19.10.2020, 02:56
Здравствуйте, форумчане!

Кто сможет объяснить принцип бага, почему его не пофиксил калкор?

Когда создаешь TD обычный, главное чтоб появился текст, но потом создаешь поверх еще один такой же ТД но уже с TextDrawUseBox - 1
И получается, сам текст, он отрисовался правильно, то есть сначала первый, а поверх второй, но мы на втором включили TextDrawUseBox, значит с ним еще идет Box, так вот, первый ТД получается по верх второго ТД, но не текста, а именно Box. Что за прикол такой в сампе?

Может быть кто-то с этим сталкивался? Или есть способ решения, не прибегая к костылям

TDEditor_TD[1] = TextDrawCreate(173.3333, 127.7777, "Test"); // пусто
TextDrawLetterSize(TDEditor_TD[1], 0.4000, 1.6000);
TextDrawTextSize(TDEditor_TD[1], 232.0000, 0.0000);
TextDrawAlignment(TDEditor_TD[1], 1);
TextDrawColor(TDEditor_TD[1], -1);
TextDrawUseBox(TDEditor_TD[1], 1);
TextDrawBoxColor(TDEditor_TD[1], 1983054079);
TextDrawFont(TDEditor_TD[1], 1);
TextDrawSetProportional(TDEditor_TD[1], 1);
TextDrawSetShadow(TDEditor_TD[1], 0);
https://ibb.co/4T60gRKhttps://ibb.co/Sd85Rd7https://ibb.co/ryNLqSj
https://ibb.co/4T60gRK
https://ibb.co/Sd85Rd7
https://ibb.co/ryNLqSj

SteveStage
19.10.2020, 15:35
Здравствуйте, форумчане!

Кто сможет объяснить принцип бага, почему его не пофиксил калкор?

Когда создаешь TD обычный, главное чтоб появился текст, но потом создаешь поверх еще один такой же ТД но уже с TextDrawUseBox - 1
И получается, сам текст, он отрисовался правильно, то есть сначала первый, а поверх второй, но мы на втором включили TextDrawUseBox, значит с ним еще идет Box, так вот, первый ТД получается по верх второго ТД, но не текста, а именно Box. Что за прикол такой в сампе?

Может быть кто-то с этим сталкивался? Или есть способ решения, не прибегая к костылям

TDEditor_TD[1] = TextDrawCreate(173.3333, 127.7777, "Test"); // пусто
TextDrawLetterSize(TDEditor_TD[1], 0.4000, 1.6000);
TextDrawTextSize(TDEditor_TD[1], 232.0000, 0.0000);
TextDrawAlignment(TDEditor_TD[1], 1);
TextDrawColor(TDEditor_TD[1], -1);
TextDrawUseBox(TDEditor_TD[1], 1);
TextDrawBoxColor(TDEditor_TD[1], 1983054079);
TextDrawFont(TDEditor_TD[1], 1);
TextDrawSetProportional(TDEditor_TD[1], 1);
TextDrawSetShadow(TDEditor_TD[1], 0);
https://ibb.co/4T60gRKhttps://ibb.co/Sd85Rd7https://ibb.co/ryNLqSj
https://ibb.co/4T60gRK
https://ibb.co/Sd85Rd7
https://ibb.co/ryNLqSj

Логично предположить, что в текстдраве приоритет верхнего бокса больше, чем нижний текст, но меньше, чем бокс нижнего текстдрава.