Includes richtig erstellen | Hooking ganz einfach

In 10 Minuten startet der nächtliche Backupvorgang! Es kann währenddessen (ca. 10 Minuten) zu Einschränkungen bei der Nutzung des Forums kommen
Weitere Infos findet ihr im Thema Backup des Forums
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • und ich bekomme die Fehler:


    Das bringt aber so nichts soviel.


    Hast du die forwards gesetzt?


    sonst musst du mir mal die ganzen Fehler geben, denn so sieht man da keinen Fehler

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski


  • Das bringt aber so nichts soviel.


    Hast du die forwards gesetzt?


    sonst musst du mir mal die ganzen Fehler geben, denn so sieht man da keinen Fehler


    Ja, habe ich alle gesetzt..
    Das sind ja die ganzen Fehler..
    In beiden Includes sind z.B. "OnPlayerConnect", und dafür bekomme ich halt nen Fehler..

  • Dann könnte das an anderen Includes liegen.
    Das kann man ohne Code schwer sagen.


    Die reine Umdefintion von dir ist ja richtig, der Fehler muss/wird wo anders liegen.


    //Edit: Ich hab nach knapp 1,5 Jahren, eine kleine Änderung vorgenommen und zwar am Aufrufen des Callbacks aus dem Hook heraus.
    Diese Variante ist deutlich besser.
    Schaut für nähere Informationen, bitte in den Startpost.

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

    Einmal editiert, zuletzt von Akino Kiritani ()

  • Guten Tag,
    ich versuche grade in meinen Includes das Hooking zu verwenden.
    Derzeit versuche ich in 3 Includes OnPlayerSpawn(playerid) zu hooken.


    forward _OnPlayerSpawn(playerid);
    public OnPlayerSpawn(playerid)
    {
    #if defined _OnPlayerSpawn
    return _OnPlayerSpawn(playerid);
    #else
    return true;
    #endif
    }
    #if defined _OnPlayerSpawn
    forward _OnPlayerSpawn(playerid);
    #endif


    #if defined _ALS_OnPlayerSpawn
    #undef OnPlayerSpawn
    #else
    #define _ALS_OnPlayerSpawn
    #endif
    #define OnPlayerSpawn _OnPlayerSpawn


    So habe ich das in jedem Include
    Und ich erhalte folgende Fehle
    C:\Users\Nils\Desktop\Scripts\02_SAMP\R38\pawno\include\.../.../TeamDM.inc(17) : error 021: symbol already defined: "_OnPlayerSpawn"
    C:\Users\Nils\Desktop\Scripts\02_SAMP\R38\pawno\include\.../.../Heu.inc(17) : error 021: symbol already defined: "_OnPlayerSpawn"
    C:\Users\Nils\Desktop\Scripts\02_SAMP\R38\gamemodes\Script.pwn(672) : error 021: symbol already defined: "_OnPlayerSpawn"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    3 Errors.


    Woran liegt es das ich diese Fehler erhalte?
    Muss ich die Public's oder die Define's anders nennen wenn ich es in mehreren Includes mache?

  • Hey @Jack_Bauer:
    also muss ich diesen Teil hier


    forward _OnPlayerSpawn(playerid);
    public OnPlayerSpawn(playerid)
    {
    #if defined _OnPlayerSpawn
    return _OnPlayerSpawn(playerid);
    #else
    return true;
    #endif
    }
    #if defined _OnPlayerSpawn
    forward _OnPlayerSpawn(playerid);
    #endif


    #if defined _ALS_OnPlayerSpawn
    #undef OnPlayerSpawn
    #else
    #define _ALS_OnPlayerSpawn
    #endif
    #define OnPlayerSpawn _OnPlayerSpawn


    Immer ändern oder nur einen bestimmten Teil davon?


    @BlackAce:

  • Das was du immer ändern musst ist der Teil vor dem _ Der Callbacks.


    Bspw. Login_OnPlayerSpawn


    public OnPlayerSpawn(playerid)
    {
    #if defined Login_OnPlayerSpawn
    return Login_OnPlayerSpawn(playerid);
    #else
    return true;
    #endif
    }
    #if defined Login_OnPlayerSpawn
    forward Login_OnPlayerSpawn(playerid);
    #endif


    #if defined _ALS_OnPlayerSpawn
    #undef OnPlayerSpawn
    #else
    #define _ALS_OnPlayerSpawn
    #endif
    #define OnPlayerSpawn Login_OnPlayerSpawn

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Hey @BlackAce: Hoffe es ist okay wenn ich dir hier markiere
    public OnPlayerSpawn(playerid)
    {
    #if defined Login_OnPlayerSpawn
    return Login_OnPlayerSpawn(playerid);
    #else
    return true;
    #endif
    }


    Bei dem Code, was passiert da? Also er ruft dann Login_OnplayerSpawn auf?
    Aber er ist doch bereits in diesem Public? Was hat das für einen sinn?

  • der sinn ist, das du aufgrund der include 2 Onplayerspawn hast. im endeffektist das richtige onplayerspawn das deiner ersten include wenn dannach Login_OnPlayerspawn definiert wird so ist das onplayer spawn der 2. include das Login_Onplayerspawn in der 2. include wird dann inv_onplayerspawn definert, somit ist das onplayerspawn des gamemodes das inv_onplayerspawn.


    dh. du greifst dir in der Include das Onplayerspawn vorweg nennst das darauf folgende OnPlayerSpawn um und rufst das umbennante onplayerspawn auf.

  • PermanenT: Wenn du den Hook so wie beschrieben drin hast, passiert das automatisch.


    Der Pawn Compiler erkennt ob einer der Hooks als letztes vorhanden ist oder nicht und compiliert das dementsprechend.


    Du kannst dir das auch, wenn du magst hier angucken

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Nein, denn im Grunde führst du die Funktion bzw. das Callback aus und leitest dann einfach weiter auf eine weitere Funktion.


    Für dich heißt sie zwar im GM zwar "OnPlayerSpawn" compiliert wäre es dann aber Login_OnPlayerSpawn, das kommt durch die defines die es im Hook zusätzlich gibt.


    Die Includes werden ja im Grunde im GM zusammen geführt


    aus
    #include <a_samp>
    main () { }
    public OnGameModeInit()
    {
    return true;
    }
    wird

    Spoiler anzeigen
    /* SA-MP Functions
    *
    * (c) Copyright 2005-2015, SA-MP Team
    *
    */

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

    Spoiler anzeigen
    #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

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

    Spoiler anzeigen
    // Limits and internal constants
    #define MAX_PLAYER_NAME (24)
    #define MAX_PLAYERS (1000)
    #define MAX_VEHICLES (2000)
    #define MAX_ACTORS (1000)
    #define INVALID_PLAYER_ID (0xFFFF)
    #define INVALID_VEHICLE_ID (0xFFFF)
    #define INVALID_ACTOR_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_PLAYER_TEXT_DRAWS (256)
    #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)

    Spoiler anzeigen
    // --------------------------------------------------
    // Natives
    // --------------------------------------------------

    Spoiler anzeigen
    // 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 SendDeathMessageToPlayer(playerid, 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:VectorSize(Float:x, Float:y, Float:z);
    native Float:asin(Float:value);
    native Float:acos(Float:value);
    native Float:atan(Float:value);
    native Float:atan2(Float:x, Float:y);
    native GetPlayerPoolSize();
    native GetVehiclePoolSize();
    native GetActorPoolSize();

    Spoiler anzeigen
    // 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, addsiren=0);
    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); // deprecated function
    native EnableVehicleFriendlyFire();
    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);

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

    Spoiler anzeigen
    // 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);
    native GetPlayerVersion(playerid, const version[], len); // Returns the SA-MP client revision as reported by the player
    native BlockIpAddress(ip_address[], timems);
    native UnBlockIpAddress(ip_address[]);

    Spoiler anzeigen
    // Extended admin network stats
    native GetServerTickRate();
    native NetStats_GetConnectedTime(playerid);
    native NetStats_MessagesReceived(playerid);
    native NetStats_BytesReceived(playerid);
    native NetStats_MessagesSent(playerid);
    native NetStats_BytesSent(playerid);
    native NetStats_MessagesRecvPerSecond(playerid);
    native Float:NetStats_PacketLossPercent(playerid);
    native NetStats_ConnectionStatus(playerid);
    native NetStats_GetIpPort(playerid, ip_port[], ip_port_len);

    Spoiler anzeigen
    // 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);

    Spoiler anzeigen
    // Text Draw
    #define TEXT_DRAW_FONT_SPRITE_DRAW 4
    #define TEXT_DRAW_FONT_MODEL_PREVIEW 5

    Spoiler anzeigen
    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 TextDrawSetSelectable(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[]);
    native TextDrawSetPreviewModel(Text:text, modelindex);
    native TextDrawSetPreviewRot(Text:text, Float:fRotX, Float:fRotY, Float:fRotZ, Float:fZoom = 1.0);
    native TextDrawSetPreviewVehCol(Text:text, color1, color2);

    Spoiler anzeigen
    // 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);

    Spoiler anzeigen
    // 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[]);

    Spoiler anzeigen
    // 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[]);

    Spoiler anzeigen
    // Player GUI Dialog
    #define DIALOG_STYLE_MSGBOX 0
    #define DIALOG_STYLE_INPUT 1
    #define DIALOG_STYLE_LIST 2
    #define DIALOG_STYLE_PASSWORD 3
    #define DIALOG_STYLE_TABLIST 4
    #define DIALOG_STYLE_TABLIST_HEADERS 5

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

    Spoiler anzeigen
    // --------------------------------------------------
    // Defines
    // --------------------------------------------------

    Spoiler anzeigen
    // 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)

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

    Spoiler anzeigen
    // 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)

    Spoiler anzeigen
    // 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)

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

    Spoiler anzeigen
    // --------------------------------------------------
    // Forwards (Callback declarations)
    // --------------------------------------------------

    Spoiler anzeigen
    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, Float:new_x, Float:new_y, Float:new_z, Float:vel_x, Float:vel_y, Float:vel_z);
    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 OnActorStreamIn(actorid, forplayerid);
    forward OnActorStreamOut(actorid, forplayerid);
    forward OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]);
    forward OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart);
    forward OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid, bodypart);
    forward OnPlayerGiveDamageActor(playerid, damaged_actorid, Float:amount, weaponid, bodypart);
    forward OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ);
    forward OnPlayerClickTextDraw(playerid, Text:clickedid);
    forward OnPlayerClickPlayerTextDraw(playerid, PlayerText:playertextid);
    forward OnIncomingConnection(playerid, ip_address[], port);
    forward OnTrailerUpdate(playerid, vehicleid);
    forward OnVehicleSirenStateChange(playerid, vehicleid, newstate);

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

    Spoiler anzeigen
    #define EDIT_RESPONSE_CANCEL 0
    #define EDIT_RESPONSE_FINAL 1
    #define EDIT_RESPONSE_UPDATE 2

    Spoiler anzeigen
    forward OnPlayerEditObject( playerid, playerobject, objectid, response,
    Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ );

    Spoiler anzeigen
    forward OnPlayerEditAttachedObject( playerid, response, index, modelid, boneid,
    Float:fOffsetX, Float:fOffsetY, Float:fOffsetZ,
    Float:fRotX, Float:fRotY, Float:fRotZ,
    Float:fScaleX, Float:fScaleY, Float:fScaleZ );

    Spoiler anzeigen
    #define SELECT_OBJECT_GLOBAL_OBJECT 1
    #define SELECT_OBJECT_PLAYER_OBJECT 2

    Spoiler anzeigen
    forward OnPlayerSelectObject(playerid, type, objectid, modelid, Float:fX, Float:fY, Float:fZ);

    Spoiler anzeigen
    #define BULLET_HIT_TYPE_NONE 0
    #define BULLET_HIT_TYPE_PLAYER 1
    #define BULLET_HIT_TYPE_VEHICLE 2
    #define BULLET_HIT_TYPE_OBJECT 3
    #define BULLET_HIT_TYPE_PLAYER_OBJECT 4

    Spoiler anzeigen
    forward OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ);

    Spoiler anzeigen
    // --------------------------------------------------
    main () { }
    public OnGameModeInit()
    {
    return true;
    }


    Das bedeutet das aus dem Hook das hier wird


    public OnPlayerSpawn(playerid)
    {
    return Login_OnPlayerSpawn(playerid);
    }
    forward Login_OnPlayerSpawn(playerid);
    public Login_OnPlayerSpawn(playerid)
    {
    return true;
    }


    Ich hoffe das war irgendwie verständlich :D

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski

  • Auch das kann man gut verwalten in dem man sich ein Controller schreibt und die hocking methode mit state nutzt


    Das ist egal.


    Ich rede von der Ausführungszeit wenn es große Funktionen sind.


    Dann wirst du es nie schaffen, ohne Zeitversetzung die Funktionen (bzw Callbacks) aufzurufen...und das Problem ist einfach je mehr du das machst desto später werden sie logischerweise aufgerufen...


    Bei 30x...und jeder Callback muss 20ms verarbeitet werden hast du schon beim letzten mehr als 600ms delay... :S

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Und wie könnte man Hooks am beste nutzen ? Für eher kleine Systeme oder doch größere ?


    Ich persönliche nutze die Methode die @BlackAce: in seinem Open Pawn Projekt nutzt. Hatte vor alle Systeme in seperate Includes zu schreiben, aber wenn ich lese,dass es die Performance negativ beeinflusst, komme ich ins grübeln.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen