SA-MP Forums Archive
Question regarding includes - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (https://sampforum.blast.hk/forumdisplay.php?fid=12)
+--- Thread: Question regarding includes (/showthread.php?tid=313640)



Question regarding includes - Giovanni - 26.01.2012

From what I know, it does not matter how many includes you use, since they all will be later on implented in the .amx file. However, I am not sure about one thing:

Does it matter at which point in my script I include an include? In my case I want to include one in the middle of the script, to make everything better organized etc.

And no, those includes will not hold variables etc. which I might need before I include it. Just commands and so on.


Re: Question regarding includes - MP2 - 26.01.2012

Correct me if I'm wrong, but an include line is replaced by the code in the include, at where it is inserted, for example:

myinc.inc:

pawn Код:
stock IncludeFunc()
{
    // Stuff
    return 1;
}
gamemode.pwn:

pawn Код:
#include <a_samp>
#include <myinc>

forward sometimer(some args);
forward sometimer(some args);
forward sometimer(some args);

new var;
new playervar[MAX_PLAYERS];

new someArray[][] = {
asdasdfasfasd
};

main() {}

public OnGameModeInit()
{
    // Stuff
}
Will turn in to:

pawn Код:
/*  SA-MP Functions
 *
 *  © Copyright 2005-2011, SA-MP Team
 *
 */


#if defined _samp_included
    #endinput
#endif
#define _samp_included
#pragma library samp

#pragma tabsize 4
// Ignores warning 217 for properly indented PAWNO code
// It's tab size is 4 and often uses 4 spaces instead, PAWNCC's is 8

#include <core>
#include <float>
#include <string>
#include <file>
#include <time>
#include <datagram>
#include <a_players>
#include <a_vehicles>
#include <a_objects>
#include <a_sampdb>

// Limits and internal constants
#define MAX_PLAYER_NAME                         (24)
#define MAX_PLAYERS                             (500)
#define MAX_VEHICLES                            (2000)
#define INVALID_PLAYER_ID                       (0xFFFF)
#define INVALID_VEHICLE_ID                      (0xFFFF)
#define NO_TEAM                                 (255)
#define MAX_OBJECTS                             (1000)
#define INVALID_OBJECT_ID                       (0xFFFF)
#define MAX_GANG_ZONES                          (1024)
#define MAX_TEXT_DRAWS                          (2048)
#define MAX_MENUS                               (128)
#define MAX_3DTEXT_GLOBAL                       (1024)
#define MAX_3DTEXT_PLAYER                       (1024)
#define MAX_PICKUPS                             (4096)
#define INVALID_MENU                            (0xFF)
#define INVALID_TEXT_DRAW                       (0xFFFF)
#define INVALID_GANG_ZONE                       (-1)
#define INVALID_3DTEXT_ID                       (0xFFFF)

// --------------------------------------------------
// Natives
// --------------------------------------------------

// Util
native print(const string[]);
native printf(const format[], {Float,_}:...);
native format(output[], len, const format[], {Float,_}:...);
native SendClientMessage(playerid, color, const message[]);
native SendClientMessageToAll(color, const message[]);
native SendPlayerMessageToPlayer(playerid, senderid, const message[]);
native SendPlayerMessageToAll(senderid, const message[]);
native SendDeathMessage(killer,killee,weapon);
native GameTextForAll(const string[],time,style);
native GameTextForPlayer(playerid,const string[],time,style);
native SetTimer(funcname[], interval, repeating);
native SetTimerEx(funcname[], interval, repeating, const format[], {Float,_}:...);
native KillTimer(timerid);
native GetTickCount();
native GetMaxPlayers();
native CallRemoteFunction(const function[], const format[], {Float,_}:...);
native CallLocalFunction(const function[], const format[], {Float,_}:...);
native Float:asin(Float:value);
native Float:acos(Float:value);
native Float:atan(Float:value);
native Float:atan2(Float:x, Float:y);

// Game
native SetGameModeText(const string[]);
native SetTeamCount(count);
native AddPlayerClass(modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:z_angle, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo);
native AddPlayerClassEx(teamid, modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:z_angle, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo);
native AddStaticVehicle(modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:z_angle, color1, color2);
native AddStaticVehicleEx(modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:z_angle, color1, color2, respawn_delay);
native AddStaticPickup(model, type, Float:X, Float:Y, Float:Z, virtualworld = 0);
native CreatePickup(model, type, Float:X, Float:Y, Float:Z, virtualworld = 0);
native DestroyPickup(pickup);
native ShowNameTags(show);
native ShowPlayerMarkers(mode);
native GameModeExit();
native SetWorldTime(hour);
native GetWeaponName(weaponid, const weapon[], len);
native EnableTirePopping(enable);
native AllowInteriorWeapons(allow);
native SetWeather(weatherid);
native SetGravity(Float:gravity);
native AllowAdminTeleport(allow);
native SetDeathDropAmount(amount);
native CreateExplosion(Float:X, Float:Y, Float:Z, type, Float:Radius);
native EnableZoneNames(enable);
native UsePlayerPedAnims();     // Will cause the players to use CJ running/walking animations
native DisableInteriorEnterExits();  // will disable all interior enter/exits in the game.
native SetNameTagDrawDistance(Float:distance); // Distance at which nametags will start rendering on the client.
native DisableNameTagLOS(); // Disables the nametag Line-Of-Sight checking
native LimitGlobalChatRadius(Float:chat_radius);
native LimitPlayerMarkerRadius(Float:marker_radius);

// Npc
native ConnectNPC(name[], script[]);
native IsPlayerNPC(playerid);

// Admin
native IsPlayerAdmin(playerid);
native Kick(playerid);
native Ban(playerid);
native BanEx(playerid, const reason[]);
native SendRconCommand(command[]);
native GetServerVarAsString(const varname[], buffer[], len);
native GetServerVarAsInt(const varname[]);
native GetServerVarAsBool(const varname[]);
native GetPlayerNetworkStats(playerid, retstr[], retstr_size);
native GetNetworkStats(retstr[], retstr_size);

// Menu
native Menu:CreateMenu(const title[], columns, Float:x, Float:y, Float:col1width, Float:col2width = 0.0);
native DestroyMenu(Menu:menuid);
native AddMenuItem(Menu:menuid, column, const menutext[]);
native SetMenuColumnHeader(Menu:menuid, column, const columnheader[]);
native ShowMenuForPlayer(Menu:menuid, playerid);
native HideMenuForPlayer(Menu:menuid, playerid);
native IsValidMenu(Menu:menuid);
native DisableMenu(Menu:menuid);
native DisableMenuRow(Menu:menuid, row);
native Menu:GetPlayerMenu(playerid);

// Text Draw
native Text:TextDrawCreate(Float:x, Float:y, text[]);
native TextDrawDestroy(Text:text);
native TextDrawLetterSize(Text:text, Float:x, Float:y);
native TextDrawTextSize(Text:text, Float:x, Float:y);
native TextDrawAlignment(Text:text, alignment);
native TextDrawColor(Text:text, color);
native TextDrawUseBox(Text:text, use);
native TextDrawBoxColor(Text:text, color);
native TextDrawSetShadow(Text:text, size);
native TextDrawSetOutline(Text:text, size);
native TextDrawBackgroundColor(Text:text, color);
native TextDrawFont(Text:text, font);
native TextDrawSetProportional(Text:text, set);
native TextDrawShowForPlayer(playerid, Text:text);
native TextDrawHideForPlayer(playerid, Text:text);
native TextDrawShowForAll(Text:text);
native TextDrawHideForAll(Text:text);
native TextDrawSetString(Text:text, string[]);

// Gang Zones
native GangZoneCreate(Float:minx, Float:miny, Float:maxx, Float:maxy);
native GangZoneDestroy(zone);
native GangZoneShowForPlayer(playerid, zone, color);
native GangZoneShowForAll(zone, color);
native GangZoneHideForPlayer(playerid, zone);
native GangZoneHideForAll(zone);
native GangZoneFlashForPlayer(playerid, zone, flashcolor);
native GangZoneFlashForAll(zone, flashcolor);
native GangZoneStopFlashForPlayer(playerid, zone);
native GangZoneStopFlashForAll(zone);

// Global 3D Text Labels
native Text3D:Create3DTextLabel(text[], color, Float:X, Float:Y, Float:Z, Float:DrawDistance, virtualworld, testLOS=0);
native Delete3DTextLabel(Text3D:id);
native Attach3DTextLabelToPlayer(Text3D:id, playerid, Float:OffsetX, Float:OffsetY, Float:OffsetZ);
native Attach3DTextLabelToVehicle(Text3D:id, vehicleid, Float:OffsetX, Float:OffsetY, Float:OffsetZ);
native Update3DTextLabelText(Text3D:id, color, text[]);

// Per-player 3D Text Labels
native PlayerText3D:CreatePlayer3DTextLabel(playerid, text[], color, Float:X, Float:Y, Float:Z, Float:DrawDistance, attachedplayer=INVALID_PLAYER_ID, attachedvehicle=INVALID_VEHICLE_ID, testLOS=0);
native DeletePlayer3DTextLabel(playerid, PlayerText3D:id);
native UpdatePlayer3DTextLabelText(playerid, PlayerText3D:id, color, text[]);

// Player GUI Dialog
#define DIALOG_STYLE_MSGBOX     0
#define DIALOG_STYLE_INPUT      1
#define DIALOG_STYLE_LIST       2
#define DIALOG_STYLE_PASSWORD   3

native ShowPlayerDialog(playerid, dialogid, style, caption[], info[], button1[], button2[]);

// --------------------------------------------------
// Defines
// --------------------------------------------------

// States
#define PLAYER_STATE_NONE                       (0)
#define PLAYER_STATE_ONFOOT                     (1)
#define PLAYER_STATE_DRIVER                     (2)
#define PLAYER_STATE_PASSENGER                  (3)
#define PLAYER_STATE_EXIT_VEHICLE               (4) // (used internally)
#define PLAYER_STATE_ENTER_VEHICLE_DRIVER       (5) // (used internally)
#define PLAYER_STATE_ENTER_VEHICLE_PASSENGER    (6) // (used internally)
#define PLAYER_STATE_WASTED                     (7)
#define PLAYER_STATE_SPAWNED                    (8)
#define PLAYER_STATE_SPECTATING                 (9)

// Marker modes used by ShowPlayerMarkers()
#define PLAYER_MARKERS_MODE_OFF         (0)
#define PLAYER_MARKERS_MODE_GLOBAL      (1)
#define PLAYER_MARKERS_MODE_STREAMED    (2)

// Weapons
#define WEAPON_BRASSKNUCKLE             (1)
#define WEAPON_GOLFCLUB                 (2)
#define WEAPON_NITESTICK                (3)
#define WEAPON_KNIFE                    (4)
#define WEAPON_BAT                      (5)
#define WEAPON_SHOVEL                   (6)
#define WEAPON_POOLSTICK                (7)
#define WEAPON_KATANA                   (8)
#define WEAPON_CHAINSAW                 (9)
#define WEAPON_DILDO                    (10)
#define WEAPON_DILDO2                   (11)
#define WEAPON_VIBRATOR                 (12)
#define WEAPON_VIBRATOR2                (13)
#define WEAPON_FLOWER                   (14)
#define WEAPON_CANE                     (15)
#define WEAPON_GRENADE                  (16)
#define WEAPON_TEARGAS                  (17)
#define WEAPON_MOLTOV                   (18)
#define WEAPON_COLT45                   (22)
#define WEAPON_SILENCED                 (23)
#define WEAPON_DEAGLE                   (24)
#define WEAPON_SHOTGUN                  (25)
#define WEAPON_SAWEDOFF                 (26)
#define WEAPON_SHOTGSPA                 (27)
#define WEAPON_UZI                      (28)
#define WEAPON_MP5                      (29)
#define WEAPON_AK47                     (30)
#define WEAPON_M4                       (31)
#define WEAPON_TEC9                     (32)
#define WEAPON_RIFLE                    (33)
#define WEAPON_SNIPER                   (34)
#define WEAPON_ROCKETLAUNCHER           (35)
#define WEAPON_HEATSEEKER               (36)
#define WEAPON_FLAMETHROWER             (37)
#define WEAPON_MINIGUN                  (38)
#define WEAPON_SATCHEL                  (39)
#define WEAPON_BOMB                     (40)
#define WEAPON_SPRAYCAN                 (41)
#define WEAPON_FIREEXTINGUISHER         (42)
#define WEAPON_CAMERA                   (43)
#define WEAPON_PARACHUTE                (46)
#define WEAPON_VEHICLE                  (49)
#define WEAPON_DROWN                    (53)
#define WEAPON_COLLISION                (54)

// Keys
#define KEY_ACTION              (1)
#define KEY_CROUCH              (2)
#define KEY_FIRE                (4)
#define KEY_SPRINT              (8)
#define KEY_SECONDARY_ATTACK    (16)
#define KEY_JUMP                (32)
#define KEY_LOOK_RIGHT          (64)
#define KEY_HANDBRAKE           (128)
#define KEY_LOOK_LEFT           (256)
#define KEY_SUBMISSION          (512)
#define KEY_LOOK_BEHIND         (512)
#define KEY_WALK                (1024)
#define KEY_ANALOG_UP           (2048)
#define KEY_ANALOG_DOWN         (4096)
#define KEY_ANALOG_LEFT         (8192)
#define KEY_ANALOG_RIGHT        (16384)
#define KEY_YES                 (65536)
#define KEY_NO                  (131072)
#define KEY_CTRL_BACK           (262144)

#define KEY_UP                  (-128)
#define KEY_DOWN                (128)
#define KEY_LEFT                (-128)
#define KEY_RIGHT               (128)

// --------------------------------------------------
// Forwards (Callback declarations)
// --------------------------------------------------

forward OnGameModeInit();
forward OnGameModeExit();
forward OnFilterScriptInit();
forward OnFilterScriptExit();
forward OnPlayerConnect(playerid);
forward OnPlayerDisconnect(playerid, reason);
forward OnPlayerSpawn(playerid);
forward OnPlayerDeath(playerid, killerid, reason);
forward OnVehicleSpawn(vehicleid);
forward OnVehicleDeath(vehicleid, killerid);
forward OnPlayerText(playerid, text[]);
forward OnPlayerCommandText(playerid, cmdtext[]);
forward OnPlayerRequestClass(playerid, classid);
forward OnPlayerEnterVehicle(playerid, vehicleid, ispassenger);
forward OnPlayerExitVehicle(playerid, vehicleid);
forward OnPlayerStateChange(playerid, newstate, oldstate);
forward OnPlayerEnterCheckpoint(playerid);
forward OnPlayerLeaveCheckpoint(playerid);
forward OnPlayerEnterRaceCheckpoint(playerid);
forward OnPlayerLeaveRaceCheckpoint(playerid);
forward OnRconCommand(cmd[]);
forward OnPlayerRequestSpawn(playerid);
forward OnObjectMoved(objectid);
forward OnPlayerObjectMoved(playerid, objectid);
forward OnPlayerPickUpPickup(playerid, pickupid);
forward OnVehicleMod(playerid, vehicleid, componentid);
forward OnEnterExitModShop(playerid, enterexit, interiorid);
forward OnVehiclePaintjob(playerid, vehicleid, paintjobid);
forward OnVehicleRespray(playerid, vehicleid, color1, color2);
forward OnVehicleDamageStatusUpdate(vehicleid, playerid);
forward OnUnoccupiedVehicleUpdate(vehicleid, playerid, passenger_seat);
forward OnPlayerSelectedMenuRow(playerid, row);
forward OnPlayerExitedMenu(playerid);
forward OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid);
forward OnPlayerKeyStateChange(playerid, newkeys, oldkeys);
forward OnRconLoginAttempt( ip[], password[], success );
forward OnPlayerUpdate(playerid);
forward OnPlayerStreamIn(playerid, forplayerid);
forward OnPlayerStreamOut(playerid, forplayerid);
forward OnVehicleStreamIn(vehicleid, forplayerid);
forward OnVehicleStreamOut(vehicleid, forplayerid);
forward OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]);
forward OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid);
forward OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid);
forward OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ);

#define CLICK_SOURCE_SCOREBOARD     0
forward OnPlayerClickPlayer(playerid, clickedplayerid, source);

// --------------------------------------------------

stock IncludeFunc()
{
    // Stuff
    return 1;
}

forward sometimer(some args);
forward sometimer(some args);
forward sometimer(some args);

new var;
new playervar[MAX_PLAYERS];

new someArray[][] = {
asdasdfasfasd
};

main() {}

public OnGameModeInit()
{
    // Stuff
}



Re: Question regarding includes - Gh05t_ - 26.01.2012

Quote:
Originally Posted by Giovanni
Посмотреть сообщение
From what I know, it does not matter how many includes you use, since they all will be later on implented in the .amx file.
Err, not necessarily no. An included directive or a header file contains necessary information which when used upon compilation time accesses the data. Yes, data conjured upon compilation is "implemented" in the amx, but this is inaccessible.

Quote:
Originally Posted by Giovanni
Does it matter at which point in my script I include an include? In my case I want to include one in the middle of the script, to make everything better organized etc.
The point of includes (as stated before) is to allow use of it's information (natives, data types etc..) in your script. They are generally appointed at the top because upon compilation, there is a sequence where each line of code is evaluated separately and individually. If includes where placed anywhere AFTER data which is relevant (data which makes use of the include) the code is simply unrecognisable.

pawn Код:
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 OnGameModeExit()
{
    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 OnPlayerConnect(playerid)
{
    return 1;
}

public OnPlayerDisconnect(playerid, reason)
{
    return 1;
}

public OnPlayerSpawn(playerid)
{
    return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
    return 1;
}

public OnVehicleSpawn(vehicleid)
{
    return 1;
}

public OnVehicleDeath(vehicleid, killerid)
{
    return 1;
}

public OnPlayerText(playerid, text[])
{
    return 1;
}

public OnPlayerCommandText(playerid, cmdtext[])
{
    if (strcmp("/mycommand", cmdtext, true, 10) == 0)
    {
        // Do something here
        return 1;
    }
    return 0;
}

public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
{
    return 1;
}

public OnPlayerExitVehicle(playerid, vehicleid)
{
    return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
    return 1;
}

public OnPlayerEnterCheckpoint(playerid)
{
    return 1;
}

public OnPlayerLeaveCheckpoint(playerid)
{
    return 1;
}

public OnPlayerEnterRaceCheckpoint(playerid)
{
    return 1;
}

public OnPlayerLeaveRaceCheckpoint(playerid)
{
    return 1;
}

public OnRconCommand(cmd[])
{
    return 1;
}

public OnPlayerRequestSpawn(playerid)
{
    return 1;
}

public OnObjectMoved(objectid)
{
    return 1;
}

public OnPlayerObjectMoved(playerid, objectid)
{
    return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
    return 1;
}

public OnVehicleMod(playerid, vehicleid, componentid)
{
    return 1;
}

public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
{
    return 1;
}

public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
    return 1;
}

public OnPlayerSelectedMenuRow(playerid, row)
{
    return 1;
}

public OnPlayerExitedMenu(playerid)
{
    return 1;
}

public OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid)
{
    return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    return 1;
}

public OnRconLoginAttempt(ip[], password[], success)
{
    return 1;
}

public OnPlayerUpdate(playerid)
{
    return 1;
}

public OnPlayerStreamIn(playerid, forplayerid)
{
    return 1;
}

public OnPlayerStreamOut(playerid, forplayerid)
{
    return 1;
}

public OnVehicleStreamIn(vehicleid, forplayerid)
{
    return 1;
}

public OnVehicleStreamOut(vehicleid, forplayerid)
{
    return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    return 1;
}

public OnPlayerClickPlayer(playerid, clickedplayerid, source)
{
    return 1;
}

#include <a_samp>
Код:
C:\Users\Gh05t\Desktop\SA-MP\gamemodes\test.pwn(3) : error 017: undefined symbol "print"
C:\Users\Gh05t\Desktop\SA-MP\gamemodes\test.pwn(3) : warning 215: expression has no effect
C:\Users\Gh05t\Desktop\SA-MP\gamemodes\test.pwn(3) : error 001: expected token: ";", but found ")"
C:\Users\Gh05t\Desktop\SA-MP\gamemodes\test.pwn(3) : error 029: invalid expression, assumed zero
C:\Users\Gh05t\Desktop\SA-MP\gamemodes\test.pwn(3) : fatal error 107: too many error messages on one line

Compilation aborted.Pawn compiler 3.2.3664	 	 	Copyright © 1997-2006, ITB CompuPhase


4 Errors.
In a blank gamemode, the a_samp include is most notably at the top of script. When placed at the bottom of the script (as seen in the example above) we recieve errors. According to the compiler output, "print" is undefined. This is because "print" ( the first line evaluated after main() ) is accessible only through the a_samp include. Since a_samp has not been recognized BEFORE the print the statement, an error is outputted of unrecognisable code.


AW: Question regarding includes - Giovanni - 27.01.2012

Alright, thanks. So in my case (I only want to have commands in my includes) it doesn't matter right?