You are not logged in.

Impact

Super Moderator

Posts: 1,276

wcf.user.option.userOption53: Nein

  • Send private message

21

Tuesday, December 27th 2011, 1:16am

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

Tuesday, December 27th 2011, 10:09pm

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 Source code

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 Source code

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

Posts: 1,276

wcf.user.option.userOption53: Nein

  • Send private message

23

Tuesday, December 27th 2011, 10:41pm

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

PHP Source code

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

PHP Source code

1
select FROM players WHERE steamid 'SteamId';

PHP Source code

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

PHP Source code

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


Keine Gewähr.

24

Saturday, December 31st 2011, 1:19am

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

PHP Source code

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

Posts: 1,276

wcf.user.option.userOption53: Nein

  • Send private message

25

Saturday, December 31st 2011, 1:32am

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

PHP Source code

1
new bool:iWasChecked[MAXPLAYERS+1];

Und im Callback dann

PHP Source code

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

Saturday, December 31st 2011, 3:26am

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

MadMakz

Super Moderator

Posts: 1,878

Location: ~#

wcf.user.option.userOption53: Ja

  • Send private message

27

Saturday, December 31st 2011, 5:13am

...

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

This post has been edited 3 times, last edit by "MadMakz" (Dec 31st 2011, 5:30am)


28

Saturday, December 31st 2011, 3:03pm

...

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

Thursday, January 5th 2012, 5:02pm

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 Source code

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 Source code

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 Source code

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.

This post has been edited 5 times, last edit by "Mathmos" (Jan 5th 2012, 5:43pm)


Impact

Super Moderator

Posts: 1,276

wcf.user.option.userOption53: Nein

  • Send private message

30

Thursday, January 5th 2012, 5:09pm

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

PHP Source code

1
AddPlugin(String:name);

Der Tag ist hier normalerweise nicht mehr notwendig.

MfG
Impact

31

Thursday, January 5th 2012, 5:43pm

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 has attached the following file:
  • scripting.zip (1.1 kB - 80 times downloaded - latest: Mar 16th 2024, 10:49am)

Impact

Super Moderator

Posts: 1,276

wcf.user.option.userOption53: Nein

  • Send private message

32

Thursday, January 5th 2012, 6:01pm

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 Source code

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

Zu:

PHP Source code

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

Thursday, January 5th 2012, 6:33pm

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