PDA

Просмотр полной версии : [Вопрос] Мод .pwn не видит функцию, объявленную в инклуде.



SteveStage
04.05.2020, 20:33
Инклуд:

/*
PickupAdvanced by Steve_Stage
Made in 2020
VK: vk.com/steve_stage
*/

#if !defined MAX_PLAYERS
#error [PICKUP ADVANCED] <a_samp> must include before <pickup_advanced>!
#if !defined _streamer_included
#define __pu_adv_no_streamer
#endif
#if !defined MAX_DYNAMIC_PICKUPS
#define MAX_DYNAMIC_PICKUPS 150
#endif

enum __pu_adv_enum
{
Float:__pu_adv_x, Float:__pu_adv_y, Float:__pu_adv_z, __pu_adv_timer
}
new __pu_adv_arr[MAX_DYNAMIC_PICKUPS][__pu_adv_enum];
static bool:__pu_adv_check[MAX_PLAYERS char];

#if !defined __pu_adv_no_streamer
#define CreateDynamicPickup(%0,%1,%2,%3,%4,%5,%6,%7,%8,%9,%10) __pu_adv_CreateDynamicPickup(%0,%1,%2,%3,%4,%5,%6,%7,%8,%9,%10)
stock __pu_adv_CreateDynamicPickup(__pu_adv_cdp_modelid,__pu_adv_cdp_type,Float:__pu_adv_cdp_x,Float:__pu_adv_cdp_y,Float:__pu_adv_cdp_z,__pu_adv_cdp_worldid,__pu_adv_cdp_interiorid,__pu_adv_cdp_playerid,Float:__pu_adv_cdp_streamdistance,__pu_adv_cdp_areaid,__pu_adv_cdp_priority)
{
static i = CreateDynamicPickup(__pu_adv_cdp_modelid,__pu_adv_cdp_type,Float:__pu_adv_cdp_x,Float:__pu_adv_cdp_y,Float:__pu_adv_cdp_z,__pu_adv_cdp_worldid,__pu_adv_cdp_interiorid,__pu_adv_cdp_playerid,Float:__pu_adv_cdp_streamdistance,__pu_adv_cdp_areaid,__pu_adv_cdp_priority);
__pu_adv_arr[i][__pu_adv_x] = __pu_adv_cdp_x;
__pu_adv_arr[i][__pu_adv_y] = __pu_adv_cdp_y;
__pu_adv_arr[i][__pu_adv_z] = __pu_adv_cdp_z;
return i;
}
public OnPlayerPickUpDynamicPickup(__pu_adv_oppudp_playerid,__pu_adv_oppudp_pickupid)
{
if(IsPlayerInRangeOfPoint(__pu_adv_oppudp_playerid,2.0,__pu_adv_arr[__pu_adv_oppudp_pickupid][__pu_adv_x],__pu_adv_arr[__pu_adv_oppudp_pickupid][__pu_adv_y],__pu_adv_arr[__pu_adv_oppudp_pickupid][__pu_adv_z]) && __pu_adv_check{__pu_adv_oppudp_playerid} == true) return false;
if(__pu_adv_check{__pu_adv_oppudp_playerid} == false) __pu_adv_check{__pu_adv_oppudp_playerid} = true;
__pu_adv_arr[__pu_adv_oppudp_pickupid][__pu_adv_timer] = SetTimerEx("@__pu_adv_update",300,false,"dd",__pu_adv_oppudp_playerid,__pu_adv_oppudp_pickupid);
return true;
}
#else
#define CreatePickup(%0,%1,%2,%3,%4,%5) __pu_adv_CreatePickup(%0,%1,%2,%3,%4,%5)
stock __pu_adv_CreatePickup(__pu_adv_cp_model,__pu_adv_cp_type,Float:__pu_adv_cp_x,Float:__pu_adv_cp_y,Float:__pu_adv_cp_z,__pu_adv_cp_virtualworld)
{
static i = CreatePickup(__pu_adv_cp_model,__pu_adv_cp_type,Float:__pu_adv_cp_x,Float:__pu_adv_cp_y,Float:__pu_adv_cp_z,__pu_adv_cp_virtualworld);
__pu_adv_arr[i][__pu_adv_x] = __pu_adv_cp_x;
__pu_adv_arr[i][__pu_adv_y] = __pu_adv_cp_y;
__pu_adv_arr[i][__pu_adv_z] = __pu_adv_cp_z;
return i;
}
public OnPlayerPickUpPickup(__pu_adv_oppup_playerid,__pu_adv_oppup_pickupid)
{
if(IsPlayerInRangeOfPoint(__pu_adv_oppup_playerid, 2.0, __pu_adv_arr[__pu_adv_oppup_pickupid][__pu_adv_x],__pu_adv_arr[__pu_adv_oppup_pickupid][__pu_adv_y],__pu_adv_arr[__pu_adv_oppudp_pickupid][__pu_adv_z]) && __pu_adv_check{__pu_adv_oppup_playerid} == true) return false;
if(__pu_adv_check{__pu_adv_oppup_playerid} == false) __pu_adv_check{__pu_adv_oppup_playerid} = true
__pu_adv_arr[__pu_adv_oppup_pickupid][__pu_adv_timer] = SetTimerEx("@__pu_adv_update",300,false,"dd",__pu_adv_oppup_playerid,__pu_adv_oppup_pickupid);
return true;
}
#endif
stock GetPickupPos(__pu_adv_gpp_pickupid,&Float:__pu_adv_gpp_x,&Float:__pu_adv_gpp_y,&Float:__pu_adv_gpp_z)
{
__pu_adv_gpp_x = __pu_adv_arr[__pu_adv_gpp_pickupid][__pu_adv_x];
__pu_adv_gpp_y = __pu_adv_arr[__pu_adv_gpp_pickupid][__pu_adv_y];
__pu_adv_gpp_z = __pu_adv_arr[__pu_adv_gpp_pickupid][__pu_adv_z];
return true;
}
@__pu_adv_update(__pu_adv_update_playerid,__pu_adv_update_pickupid);
@__pu_adv_update(__pu_adv_update_playerid,__pu_adv_update_pickupid)
{
if(!IsPlayerInRangeOfPoint(__pu_adv_update_playerid,2.0,__pu_adv_arr[__pu_adv_update_pickupid][__pu_adv_x],__pu_adv_arr[__pu_adv_update_pickupid][__pu_adv_y],__pu_adv_arr[__pu_adv_update_pickupid][__pu_adv_z]))
{
__pu_adv_check{__pu_adv_update_playerid} = false;
KillTimer(__pu_adv_arr[__pu_adv_update_pickupid][__pu_adv_timer]);
return false;
}
__pu_adv_arr[__pu_adv_update_pickupid][__pu_adv_timer] = SetTimerEx("@__pu_adv_update",300,false,"dd",__pu_adv_update_playerid,__pu_adv_update_pickupid);
return true;
}

Мод не видит сток GetPickupPos:

error 017: undefined symbol "GetPickupPos"

Как это исправить?

tnc
04.05.2020, 21:57
Вы не закрыли if. Попробуйте так:


/*
PickupAdvanced by Steve_Stage
Made in 2020
VK: vk.com/steve_stage
*/

#if !defined MAX_PLAYERS
#error [PICKUP ADVANCED] <a_samp> must include before <pickup_advanced>!
#if !defined _streamer_included
#define __pu_adv_no_streamer
#endif
#if !defined MAX_DYNAMIC_PICKUPS
#define MAX_DYNAMIC_PICKUPS 150
#endif

enum __pu_adv_enum
{
Float:__pu_adv_x, Float:__pu_adv_y, Float:__pu_adv_z, __pu_adv_timer
}
new __pu_adv_arr[MAX_DYNAMIC_PICKUPS][__pu_adv_enum];
static bool:__pu_adv_check[MAX_PLAYERS char];

#if !defined __pu_adv_no_streamer
#define CreateDynamicPickup(%0,%1,%2,%3,%4,%5,%6,%7,%8,%9,%10) __pu_adv_CreateDynamicPickup(%0,%1,%2,%3,%4,%5,%6,%7,%8,%9,%10)
stock __pu_adv_CreateDynamicPickup(__pu_adv_cdp_modelid,__pu_adv_cdp_type,Float:__pu_adv_cdp_x,Float:__pu_adv_cdp_y,Float:__pu_adv_cdp_z,__pu_adv_cdp_worldid,__pu_adv_cdp_interiorid,__pu_adv_cdp_playerid,Float:__pu_adv_cdp_streamdistance,__pu_adv_cdp_areaid,__pu_adv_cdp_priority)
{
static i = CreateDynamicPickup(__pu_adv_cdp_modelid,__pu_adv_cdp_type,Float:__pu_adv_cdp_x,Float:__pu_adv_cdp_y,Float:__pu_adv_cdp_z,__pu_adv_cdp_worldid,__pu_adv_cdp_interiorid,__pu_adv_cdp_playerid,Float:__pu_adv_cdp_streamdistance,__pu_adv_cdp_areaid,__pu_adv_cdp_priority);
__pu_adv_arr[i][__pu_adv_x] = __pu_adv_cdp_x;
__pu_adv_arr[i][__pu_adv_y] = __pu_adv_cdp_y;
__pu_adv_arr[i][__pu_adv_z] = __pu_adv_cdp_z;
return i;
}
public OnPlayerPickUpDynamicPickup(__pu_adv_oppudp_playerid,__pu_adv_oppudp_pickupid)
{
if(IsPlayerInRangeOfPoint(__pu_adv_oppudp_playerid,2.0,__pu_adv_arr[__pu_adv_oppudp_pickupid][__pu_adv_x],__pu_adv_arr[__pu_adv_oppudp_pickupid][__pu_adv_y],__pu_adv_arr[__pu_adv_oppudp_pickupid][__pu_adv_z]) && __pu_adv_check{__pu_adv_oppudp_playerid} == true) return false;
if(__pu_adv_check{__pu_adv_oppudp_playerid} == false) __pu_adv_check{__pu_adv_oppudp_playerid} = true;
__pu_adv_arr[__pu_adv_oppudp_pickupid][__pu_adv_timer] = SetTimerEx("@__pu_adv_update",300,false,"dd",__pu_adv_oppudp_playerid,__pu_adv_oppudp_pickupid);
return true;
}
#else
#define CreatePickup(%0,%1,%2,%3,%4,%5) __pu_adv_CreatePickup(%0,%1,%2,%3,%4,%5)
stock __pu_adv_CreatePickup(__pu_adv_cp_model,__pu_adv_cp_type,Float:__pu_adv_cp_x,Float:__pu_adv_cp_y,Float:__pu_adv_cp_z,__pu_adv_cp_virtualworld)
{
static i = CreatePickup(__pu_adv_cp_model,__pu_adv_cp_type,Float:__pu_adv_cp_x,Float:__pu_adv_cp_y,Float:__pu_adv_cp_z,__pu_adv_cp_virtualworld);
__pu_adv_arr[i][__pu_adv_x] = __pu_adv_cp_x;
__pu_adv_arr[i][__pu_adv_y] = __pu_adv_cp_y;
__pu_adv_arr[i][__pu_adv_z] = __pu_adv_cp_z;
return i;
}
public OnPlayerPickUpPickup(__pu_adv_oppup_playerid,__pu_adv_oppup_pickupid)
{
if(IsPlayerInRangeOfPoint(__pu_adv_oppup_playerid, 2.0, __pu_adv_arr[__pu_adv_oppup_pickupid][__pu_adv_x],__pu_adv_arr[__pu_adv_oppup_pickupid][__pu_adv_y],__pu_adv_arr[__pu_adv_oppudp_pickupid][__pu_adv_z]) && __pu_adv_check{__pu_adv_oppup_playerid} == true) return false;
if(__pu_adv_check{__pu_adv_oppup_playerid} == false) __pu_adv_check{__pu_adv_oppup_playerid} = true
__pu_adv_arr[__pu_adv_oppup_pickupid][__pu_adv_timer] = SetTimerEx("@__pu_adv_update",300,false,"dd",__pu_adv_oppup_playerid,__pu_adv_oppup_pickupid);
return true;
}
#endif
#endif
stock GetPickupPos(__pu_adv_gpp_pickupid,&Float:__pu_adv_gpp_x,&Float:__pu_adv_gpp_y,&Float:__pu_adv_gpp_z)
{
__pu_adv_gpp_x = __pu_adv_arr[__pu_adv_gpp_pickupid][__pu_adv_x];
__pu_adv_gpp_y = __pu_adv_arr[__pu_adv_gpp_pickupid][__pu_adv_y];
__pu_adv_gpp_z = __pu_adv_arr[__pu_adv_gpp_pickupid][__pu_adv_z];
return true;
}
@__pu_adv_update(__pu_adv_update_playerid,__pu_adv_update_pickupid);
@__pu_adv_update(__pu_adv_update_playerid,__pu_adv_update_pickupid)
{
if(!IsPlayerInRangeOfPoint(__pu_adv_update_playerid,2.0,__pu_adv_arr[__pu_adv_update_pickupid][__pu_adv_x],__pu_adv_arr[__pu_adv_update_pickupid][__pu_adv_y],__pu_adv_arr[__pu_adv_update_pickupid][__pu_adv_z]))
{
__pu_adv_check{__pu_adv_update_playerid} = false;
KillTimer(__pu_adv_arr[__pu_adv_update_pickupid][__pu_adv_timer]);
return false;
}
__pu_adv_arr[__pu_adv_update_pickupid][__pu_adv_timer] = SetTimerEx("@__pu_adv_update",300,false,"dd",__pu_adv_update_playerid,__pu_adv_update_pickupid);
return true;
}

Daniel_Cortez
04.05.2020, 22:22
Так там же явно первый #if не закрыт (#if !defined MAX_PLAYERS).

tnc
04.05.2020, 22:27
Так там же явно первый #if не закрыт (#if !defined MAX_PLAYERS).

Да, причем об этом "нормальный" компилятор говорит.


\main.pwn(80) : error 001: expected token: "#endif", but found "-end of file-"

SteveStage
04.05.2020, 22:56
Да, причем об этом "нормальный" компилятор говорит.


\main.pwn(80) : error 001: expected token: "#endif", but found "-end of file-"


Я не использую pawno.exe, не заметил. Спасибо DC и tnc.

И еще один вопрос - как перехватить калбэк OnPlayerPickUpDynamicPickup, чтобы его можно было потом использовать дальше в моде?

Метод, который указан в инклуде не действует:
error 021: symbol already defined: "OnPlayerPickUpDynamicPickup"

Nexius_Tailer
05.05.2020, 03:18
Я не использую pawno.exe, не заметил.
Редактор кода на это никак не влияет


И еще один вопрос - как перехватить калбэк OnPlayerPickUpDynamicPickup, чтобы его можно было потом использовать дальше в моде?
Сокращать его название. Но учитывая, что у разных инклудов сокращения расходятся, самый универсальный на данный момент вариант такой:

public OnPlayerPickUpDynamicPickup(playerid, pickupid)
{
#if defined my_OnPlayerPickUpDynamicPickup
return my_OnPlayerPickUpDynamicPickup(playerid, pickupid);
#else
return 1;
#endif
}

#if defined _ALS_OnPlayerPickUpDynamicPicku\
|| defined _ALS_OnPlayerPickUpDynPickup\
|| defined _ALS_OnPlayerPickUpDynamicPick\
|| defined _ALS_OnPlayerPickUpDynamicPUp
#undef OnPlayerPickUpDynamicPickup
#else
#define _ALS_OnPlayerPickUpDynamicPicku
#define _ALS_OnPlayerPickUpDynPickup
#define _ALS_OnPlayerPickUpDynamicPick
#define _ALS_OnPlayerPickUpDynamicPUp
#endif
#define OnPlayerPickUpDynamicPickup my_OnPlayerPickUpDynamicPickup
#if defined my_OnPlayerPickUpDynamicPickup
forward my_OnPlayerPickUpDynamicPickup(playerid, pickupid);
#endif