Sie sind nicht angemeldet.

Impact

Super Moderator

Beiträge: 1 276

Rootserver vorhanden: Nein

  • Nachricht senden

21

Dienstag, 27. Dezember 2011, 01:16

1.) Das forced ein semicolon nach den Commands, ist nicht nötig, aber ist bei vielen Programmiersprachen Standart.
2.) Das verhindert dass die Datei 2 mal included wird.

Ich habe dir mein Steamnamen geschickt falls du weitere Fragen hast.

MfG
Impact

22

Dienstag, 27. Dezember 2011, 22:09

Ich versuche gerade in eine existierende Tabelle einer sql Datenbank einen neue Spalte hinzuzufügen.
Der Code den ich gefunden habe funktioniert auch so halbwegs.
Es wird eine neue Spalte angelgt, allerdings bekommen ich ein Error in den Logs ausgeschmissen, wenn der Code nochmals ausgeführt wird, da ja die Spalte schon existiert.
Wie kann ich nun rausfinden ob diese Spalte schon existiert?

PHP-Quelltext

1
2
3
4
5
6
7
AddColumn()
{
    decl String:sQuery[512];
    Format(sQuerysizeof(sQuery), "ALTER TABLE meinetabelle ADD `neuspalte` int(12) NULL;");
    SendQuery(sQuery);
    
}


Ich habe bereits einiges Ausprobiert. Allerdings bekomme ich immer einen syntay Error rausgeschmissen.

PHP-Quelltext

1
Format(sQuerysizeof(sQuery), "IF NOT EXISTS SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = ‘meinetabelle’ AND COLUMN_NAME = ‘neuspalte’ ALTER TABLE meinetabelle ADD neuspalte int(12) NULL;");

Impact

Super Moderator

Beiträge: 1 276

Rootserver vorhanden: Nein

  • Nachricht senden

23

Dienstag, 27. Dezember 2011, 22:41

Bezogen auf SQLite, hatte ich mir vor einiger zeit mal aufgeschrieben gehabt, vielleicht hilft es dir ja.

PHP-Quelltext

1
CREATE TABLE IF NOT EXISTS players (steamid TEXT UNIQUEname TEXTrounds INTEGERlastconnect DATE);

PHP-Quelltext

1
select FROM players WHERE steamid 'SteamId';

PHP-Quelltext

1
UPDATE players SET name 'SomeName' WHERE steamid 'Someid';

PHP-Quelltext

1
INSERT INTO players VALUES ('Someid''Somename');


Keine Gewähr.

24

Samstag, 31. Dezember 2011, 01:19

Ich benutze folgende Funktion um von Spielern die SteamID zu ermitteln nach dem connecten.

PHP-Quelltext

1
public OnClientAuthorized(client, const String:auth[])


Allerdings wird diese Funktion auch immer bei Mapchange für jeden Spieler ausgeführt.
Ich hatte auch schon versucht "OnClientConnect" zu benutzen, allerdings bekomme ich da keine SteamID ermittelt.

Gibts da ne einfache Möglichkeit, dass die "OnClientAuthorized" Funktion nicht bei jedem Mapchange für jeden Spieler aufgerufen wird?

Impact

Super Moderator

Beiträge: 1 276

Rootserver vorhanden: Nein

  • Nachricht senden

25

Samstag, 31. Dezember 2011, 01:32

Wie wäre es mit einer Globalen Variable a'la

PHP-Quelltext

1
new bool:iWasChecked[MAXPLAYERS+1];

Und im Callback dann

PHP-Quelltext

1
2
3
4
5
6
7
8
public OnClientAuthorized(client, const String:auth[])
{
    if(!iWasChecked[client])
    {
        // Irgendwas machen
        iWasChecked[client] = true;
    }
}

Wenn dir das mit den Clientindexes zu unsicher ist, kannst du je nachdem wie dein Script arbeitet ja auch einfach sehen ob u die Steamid schon hast, oder andere Methoden nutzen.
ich hab mir dazu 2 Funktionen geschrieben, GetClientNumericSteamId(client) und GetClientOfNumericSteamId(NumericalId).
Ohne mehr Infos kann ich nicht mehr sagen, hoffe das hilft.

MfG
Impact

26

Samstag, 31. Dezember 2011, 03:26

Oh man, ich sollte infach nur ins Bett gehen^^
Manchmal kommt man auf die simpelsten Dinge nicht xD

MadMakz

Super Moderator

Beiträge: 1 878

Wohnort: ~#

Rootserver vorhanden: Ja

  • Nachricht senden

27

Samstag, 31. Dezember 2011, 05:13

...

Allerdings wird diese Funktion auch immer bei Mapchange für jeden Spieler ausgeführt.
Ich hatte auch schon versucht "OnClientConnect" zu benutzen, allerdings bekomme ich da keine SteamID ermittelt.

...


OnClientConnect(), OnClientConnected(), OnClientPutInServer(), OnClientAuthorized(), OnClientPostAdminCheck() werden immer nach einem mapwechsel neu feuern und das nicht ohne grund

source lässt die clients nämlich bei jedem mapwechsel neu verbinden.

http://wiki.alliedmods.net/Introduction_…on_mapchange.3F

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »MadMakz« (31. Dezember 2011, 05:30)


28

Samstag, 31. Dezember 2011, 15:03

...

Allerdings wird diese Funktion auch immer bei Mapchange für jeden Spieler ausgeführt.
Ich hatte auch schon versucht "OnClientConnect" zu benutzen, allerdings bekomme ich da keine SteamID ermittelt.

...


OnClientConnect(), OnClientConnected(), OnClientPutInServer(), OnClientAuthorized(), OnClientPostAdminCheck() werden immer nach einem mapwechsel neu feuern und das nicht ohne grund

source lässt die clients nämlich bei jedem mapwechsel neu verbinden.

http://wiki.alliedmods.net/Introduction_…on_mapchange.3F


Alles klar, Danke =)

Dh., bei jedem Mapchange wird bei jedem Spieler das Disconnect-Event gefeuert und das Connect-Event. Aber die Spielzeit bleibt bestehen, solange man nicht manuell disconnectet... Nagut, gut zu wissen.

29

Donnerstag, 5. Januar 2012, 17:02

Ich habe da ein kleines String Problem.
Hoffe mir kann jemand weiterhelfen.

Und zwar, habe ich ein Haupt Addon, dann eine .inc für andere Addons und ein zweites Addon.

.inc Datei

PHP-Quelltext

1
2
3
4
5
6
7
8
/**
 * Adds a player to the database.
 *
 * @param String:name        Playername.
 * @noreturn
 */
 
native AddPlayer(const String:name[]);


zweites Addon

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
#include <sourcemod>
#include <player>


public OnPluginStart()
{    
    decl String:name[32];
    Format(namesizeof(name), "test");
    PrintToChatAll("Ausgabe1 :%s!"name);
    AddPlugin(String:name);

}


Haupt Addon

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
public APLRes:AskPluginLoad2(Handle:myselfbool:lateString:error[], err_max)
{
    CreateNative("AddPlayer"Native_AddPlayer);    
    return APLRes_Success;
}

public Native_AddPlayer(Handle:pluginnumParams)
{
    PrintToChatAll("Ausgabe2 :%s!"GetNativeCell(1));
}


Wenn ich mir den String im zweiten Addon per PrintToChat ausgeben lasse, stimmt das.
Aber im Haupt Addon kommt nur Mist an.
Mit Integer Werten klappt das hingegen wunderbar.

Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von »Mathmos« (5. Januar 2012, 17:43)


Impact

Super Moderator

Beiträge: 1 276

Rootserver vorhanden: Nein

  • Nachricht senden

30

Donnerstag, 5. Januar 2012, 17:09

Lädst du mal alles was du hast in einem Ziparchiv hoch?
So kann man das etwas besser nachprüfen.

PHP-Quelltext

1
AddPlugin(String:name);

Der Tag ist hier normalerweise nicht mehr notwendig.

MfG
Impact

31

Donnerstag, 5. Januar 2012, 17:43

Ich hab es mal oben editiert, hatte was vergessen und habe das SQL zeugs rausgenommen, da es ja nichts mit dem Fehler zu tun hat....

Ausgabe1: test!
Ausgabe2: xJ!

Aber anbei noch die Dateien
»Mathmos« hat folgende Datei angehängt:
  • scripting.zip (1,1 kB - 80 mal heruntergeladen - zuletzt: 16. März 2024, 10:49)

Impact

Super Moderator

Beiträge: 1 276

Rootserver vorhanden: Nein

  • Nachricht senden

32

Donnerstag, 5. Januar 2012, 18:01

Das Problem daran ist, du hast in der Test1.sp einen String "Test!" declariert.
In der test_main1.sp versuchst du diesen String mit GetNativeCell zu empfangen was dir natürlich ein Integer zurückgibt, du diesen aber als String ausgeben magst, du siehst, das kann nicht funktionieren.

Von:

PHP-Quelltext

1
2
3
4
public Native_AddPlayer(Handle:pluginnumParams)
{
    PrintToChatAll("Ausgabe2: %s!"GetNativeCell(1));
}

Zu:

PHP-Quelltext

1
2
3
4
5
6
public Native_AddPlayer(Handle:pluginnumParams)
{
    new String:Buffer[256];
    GetNativeString(1Buffersizeof(Buffer));
    PrintToChatAll("Ausgabe2: %s!"Buffer);
}


Mfg
Impact

33

Donnerstag, 5. Januar 2012, 18:33

-.- und ich rätsel da stunden dran rum und probier und probier... manchmal sieht man den Wald vor lauter Bäumen kaum ;)
Aber danke^^