LogError просто делает запись в логи но не указывает строку.. дайте пример если у вас указывает.LogError, правда оно укажет именно на эту строку, удобно если их много, а текст ошибки один.
ThrowError отрубает плагин где было вызвано это... можно как-то его не оключать? просто ошибку написало и живем дальше)
LogError("Banana uporotii");LogError просто делает запись в логи но не указывает строку.. дайте пример если у вас указывает.
public GetFullAdminInfoForStaemID(char SteamID[32])
{
new Handle:b_pack = CreateDataPack();
WritePackCell(b_pack, 0);
WritePackString(b_pack, "INVALID_STEAMID");
return b_pack;
}
int rtn;
Call_StartForward(h_GetFullAdminInfoForStaemID);
Call_PushString(SteamID);
Call_Finish(rtn);
DataPack b_pack = view_as<DataPack>(rtn); // Получаем наш DataPack
ResetPack(b_pack);
ПЛАГИН №2Покажите код создания форварда.В
Вообще, пятый код ошибки - это "Нет доступа". Передайте права на хендл нужному плагину.
new Handle:h_GetFullAdminInfoForStaemID;
public OnPluginStart()
{
h_GetFullAdminInfoForStaemID = CreateGlobalForward("GetFullAdminInfoForStaemID", ET_Single, Param_String);
}
bool GetFullAdminInfoForStaemIDFunc(char SteamID[32])
{
int rtn;
Call_StartForward(h_GetFullAdminInfoForStaemID);
Call_PushString(SteamID);
Call_Finish(rtn);
return rtn;
}
//Где-то мы вызываем его..
int iDataPack = GetFullAdminInfoForStaemIDFunc(SteamID);
new Handle:b_pack = view_as<DataPack>(iDataPack); // Получаем наш DataPack
ResetPack(b_pack);
public GetFullAdminInfoForStaemID(char SteamID[32])
{
new Handle:b_pack = CreateDataPack();
WritePackCell(b_pack, 0);
WritePackString(b_pack, "INVALID_STEAMID");
return b_pack;
}
Пожалуйста помогите кодом так мне будет куда понятней что вы хотите предложить.по идее это из-за того что владелец хендла - плагин №1 и эта переменная находится в его стеке, получается что она доступна только ему.
Если ты хочешь чтобы тебе в ответ всегда возвращался датапак - просто создавай его в плагине 2 и передавай параметром в форварде, тогда можно и не возвращать т.к. он по ссылке будет изменять оригинал.
Или через CloneHandle сделать плагин 2 владельцем, но тогда нужно зать его handle
[CODE=cpp]код[/CODE]
Это сложно, потому что реализация "смены владельца" требует иметь хендл плагина, кому нужно передать права. В Вашей реализации такого не предусмотрено.Пожалуйста помогите кодом так мне будет куда понятней что вы хотите предложить.
Call_PushCell(GetMyHandle())
public GetFullAdminInfoForStaemID(char SteamID[32], Handle hRequester) // в данном случае, предполагаем, что хендл приходит вторым аргументом
{
new Handle:hPack = CreateDataPack();
WritePackCell(hPack, 0);
WritePackString(hPack, "INVALID_STEAMID");
new Handle:hReturnPack = CloneHandle(hPack, hRequester);
hPack.Close();
return hReturnPack;
}
Если что, на форуме можно уже форматировать в С++ стиле, а не в PHP.[CODE=cpp]код[/CODE]
Это сложно, потому что реализация "смены владельца" требует иметь хендл плагина, кому нужно передать права. В Вашей реализации такого не предусмотрено.
Добавьте в форвард ещё один Cell, и:
А в том плагине, в котором производите "махинации":C++:Call_PushCell(GetMyHandle())
C++:public GetFullAdminInfoForStaemID(char SteamID[32], Handle hRequester) // в данном случае, предполагаем, что хендл приходит вторым аргументом { new Handle:hPack = CreateDataPack(); WritePackCell(hPack, 0); WritePackString(hPack, "INVALID_STEAMID"); new Handle:hReturnPack = CloneHandle(hPack, hRequester); hPack.Close(); return hReturnPack; }
}
h_GetFullAdminInfoForStaemID = CreateGlobalForward("GetFullAdminInfoForStaemID", ET_Single, Param_String, Param_Cell);
}
bool GetFullAdminInfoForStaemIDFunc(char SteamID[32])
{
int rtn;
Call_StartForward(h_GetFullAdminInfoForStaemID);
Call_PushString(SteamID);
Call_PushCell(h_GetFullAdminInfoForStaemID)
Call_Finish(rtn);
return rtn;
}
юхуу получилось)Зачем форвард передаёте?
Нужно передавать именно хендл плагина (его возвращает нативGetMyHandle()
).
А так, да.
как передать массив данных через Forward в другой плагин?
а если нужно в public вернуть обычный массив в плагин вызова форварда?
Call_PushArrayEx()
, который умеет еще возвращать в плагин, откуда производится вызов, модифицированный массив. void func()
{
char szBuffer[MAXPLAYERS+1][PMP];
//...
ArrayList aBuffer = ConVertToArrayList(szBuffer, sizeof(szBuffer), sizeof(szBuffer[]));
Call_StartForward(/*...*/);
Call_PushCell(aBuffer);
Call_Finish();
}
ArrayList ConVertToArrayList(const char[][] szBuffer, int iSize, const int iBlockSize)
{
ArrayList aBuffer = new ArrayList(iBlockSize, 0);
for(int i; i < iSize; i++)
aBuffer.PushString(i, szBuffer[i]);
return aBuffer;
}