Beiträge von Bequiet

    Hey,


    nachdem ich die Transmutation hinzugefügt hatte hatte es erst gut funktioniert.


    Allerdings habe ich jetzt nach einem Server-Restart das Problem, dass jedesmal, wenn ich einen Shop erstellen will
    ich ein DC bekomme.


    folgender Fehler tauchcht in der Serverside syserr auf:


    C
    1. Process: UNKNOWN HEADER: 247, LAST HEADER: 0(0), REMAIN BYTES: 67, fd: 29


    Die zahl bei Unknown Header variiert jedesmal ... hinten bleibt alles gleich.



    Hat jemand eine ahnung, was hier das Problem ist ?


    LG Bequiet

    Macht sinn ... allerdings hab ich leider keine ahnung, wie ich den titel in den client bekomme ^^


    Bin in C++ noch sehr neu & eigne mir das ganze erst an :)

    Ja stimmt schon ^^


    .. zum topic:


    habe die DB etc. jetzt mal neu gemacht ... jetzt kann ich den server starten.


    Allerdings bekomme ich jetzt folgenden fehler, sobald ich einen shop eröffnen möchte:


    Code
    1. Process: UNKNOWN HEADER: 197, LAST HEADER: 0(0), REMAIN BYTES: 80, fd: 29

    (Serverside)


    Kurz darauf werde ich gekickt, der Server allerdings bleibt online



    EDIT: Habs endlich so hinbekommen :)


    LG Bequiet

    Hey,


    Und zwar sieht man ja oft leute, welche nicht mit der dumb_proto klarkommen.
    Bzw. wie zum Beispiel die Fliege files keine txt dateien nutzen und dies daher mit der dumb_proto für anfänger meist schwer ist.


    Jedenfalls Gibt es mit den entpackern & packern eine möglichkeit alles bequem via xml dateien wie damals zu bearbeiten.


    Dazu sei gesagt, dass die Programme nicht von mir gecodet sind, ich allerdings nicht mehr weiß von wem sie sind.


    Das ganze sollte bei allen neuen Files funktionieren.


    Kleines How-To:


    Itemproto


    1. Itemproto ins verzeichnis des Itemproto entpackers ziehen
    2. read_item_proto.xml auf die .exe ziehen
    3. itemproto_dumb.xml bearbeiten
    4. write_item_proto.xml auf die .exe ziehen
    5. fertig.


    Mobproto (denke mal mehr gesucht :D)


    1. Mobproto ins verzeichnis des Mobproto entpackers ziehen
    2. mob_proto_extract.xml auf die m2.exe ziehen
    3. mob_proto aus dem verzeichnis entfernen
    4. mob_proto_dumb.xml bearbeiten
    5. mob_proto_create.xml auf m2.exe ziehen
    6. die NEUE mob_proto auf ProtoReaderNewFormat.exe ziehen
    7. mob_proto erneut entfernen
    8. mob_proto.txt und mob_names.txt markieren und zusammen auf dumb_proto.exe ziehen
    9. fertig.



    Ja ich weiß ... die dateien gibt es bestimmt schon 1000x in allen Foren, jedoch hoffe ich hiermit vielleicht das ganze System
    wenigstens etwas simpler oder verständlicher zu machen.


    Und auch wenn es umständlich ist braucht man so keine .txt files und kann die Clientside Item Proto ohne probleme unabhängig vom Server bearbeiten.


    Und kommentar dazu, wie oft es das schon gibt brauchen wir hier nicht :) Hier wird nur versucht neuen Talenten eine chance zu geben ^^


    Hier noch der DL Link:



    LG Bequiet

    Hey,


    geht mal wieder um was ... nennen wir es "nerviges". :)


    Und zwar hab ich das Problem, dass ich gerne die dwLookVnum zum Offlineshop hinzufügen würde, aber egal, wo ich es auch dazu schreibe ...
    kommt es mir vor, als würde der src ignorieren, dass es existert ^^.


    Hat das jemand schon mal gemacht & kann mir da vielleicht ein wenig helfen ?
    Gibt dann natürlich auch was dafür ^^


    Offline shop von Great
    und Transmutation von Sneaky



    #Edit: Soweit passt jetzt das meiste ... allerdings bekomme ich masive probleme mit der TShopItemTable in tables.h


    Sobald ich hier mein DWORD dwVnum hinzufügen möchte bekomme ich beim Server Boot einen core dumb
    Fehler: Boot: shop table size error (syserr)



    Gemeint ist damit wohl:






    wenn ich das DWORD dwvnum wieder entferne geht alles wieder.
    Allerdings benötige ich das, um die tabelle auszulesen :/


    Jemand vielleicht ne ahnung, weshalb ich hier nichts hinzufügen kann ?


    LG Bequiet

    Hey,


    und zwar hab ich folgendes Problem:


    Ich erstelle einen Shop, klicke auf "Ok" um den laden zu platzieren.
    Aber dann kommt der Laden nicht.


    Clientside kommt dann keine fehlermeldung.


    Serverside Syserr:


    Code
    1. SYSERR: Jul 11 12:38:37 :: _find_npc_by_vnum: invalid argument
    2. SYSERR: Jul 11 12:38:37 :: _find_npc_by_vnum: invalid argument
    3. SYSERR: Jul 11 12:40:05 :: DirectQuery: AsyncSQL::DirectQuery : mysql_query error: Field 'shop_vid' doesn't have a default value
    4. query: insert into player_shop set item_count=2,player_id=32,name="Test",map_index=41,x=959918,y=270481,z=0,ip='91.67...',date=NOW(),date_close=FROM_UNIXTIME(1499780405),channel=1
    5. SYSERR: Jul 11 12:40:22 :: DirectQuery: AsyncSQL::DirectQuery : mysql_query error: Field 'shop_vid' doesn't have a default value
    6. query: insert into player_shop set item_count=1,player_id=32,name="test",map_index=41,x=959858,y=270179,z=0,ip='91.67...',date=NOW(),date_close=FROM_UNIXTIME(1499856022),channel=1


    Hat jemand ne ahnung, was hier schief geht ?
    Also für mich siehts so aus, als würde er ein problem mit dem _find_npc_by_vnum haben ...


    Hoffe jemand kann mir da helfen :)


    LG Bequiet



    EDIT: war nur ein falscher Default wert in der DB

    Hey,


    und zwar sind wir auf der Suche nach ein bis zwei Personen, die sich gerne
    an unserem Server-Projekt "Kyona" beteiligen möchten.


    Hierbei geht es jedenfalls um feste Teammitgleider.


    Einen Stichtag / Release/Beta Tag gibt es noch keinen.
    Daher besteht kein Zeitdruck.


    Gesucht sind:
    - Ein Designer (erfahren)
    - Eine Person, die sich mit Konzept umsetzung & Einbauten beschäftigt, welche bereits Releast sind. (evtl. einfache Programmierarbeiten, DB, Drop etc.)


    Zum Server:


    Der Server basiert auf dem Middleschool Konzept, welches um 2014 recht gängig war.
    Allerdings ist dies nur auf das "Feeling" bezogen. Der Server hat also die Grundeigenschaften eines
    Middleschool Servers, allerdings mit ein paar Extras.


    Zudem wird sehr viel Wert auf Qualität gelegt. Das Gameplay soll so flüssig wie möglich gestaltet werden.


    vieles kommt von mir selbst. Oder ist noch in Planung. Daher wird der Server recht abwechslungsreich :)


    Wenn ich dein Interesse geweckt habe, oder du weitere Fragen hast antworte einfach auf diesen Thread oder schreib' mir eine Private Nachricht.


    LG Bequiet

    Hey,


    nachdem die /flush Funktion leider den Namen nicht neu lädt hab ich mich mal an nen questbefehl gesetzt, der das kann.


    Das ganze ermöglicht es Beispielsweiße einen Premium-Titel "[P]" oder ähnlich mit einem Teleport/CHswitch anzuzeigen oder
    zu entfernen.


    Normalerweiße war es "normal" einen Spieler, welcher sich Premium/Vip gekauft hatte zu kicken & für 10min zu bannen, um den nächsten Save abzuwarten.
    Das kann damit umgangen werden :)


    Zum How-To:


    Server Src:


    questlua_pc.cpp


    Sucht nach:

    C: questlua_pc.cpp
    1. int pc_change_name(lua_State* L)





    und fügt darüber folgendes ein:

    C: questlua_pc.cpp
    1. int pc_flush_name(lua_State* L)
    2. {
    3. LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();
    4. const char * szName = lua_tostring(L, 1);
    5. ch->SetNewName(szName);
    6. }


    Dann sucht ihr nach:


    C: questlua_pc.cpp
    1. { "change_name", pc_change_name },


    und fügt darüber folgendes ein:

    C: questlua_pc.cpp
    1. { "flush_name", pc_flush_name },


    Als letztes noch die funktion pc.flush_name in die quest_functions eintragen.


    Und fertig :)


    Die funktion benötigt als argument den neuen Namen.


    Beispiel:


    PHP: quest
    1. when login with pc.getqf("vip") == true begin
    2. local ret = query(...)
    3. local new_name = ret[1][1]
    4. pc.flush_name(new_name)
    5. end


    Macht natürlich sinn im zusammenhang mit der Trennung von Title & Name :)



    LG Bequiet :)

    hey,


    und zwar gings um folgendes:


    Wir hatten Premium User, bei denen das Premium abgelaufen ist & sie dadurch ihren Titel "[P]" wieder abgenommen bekamen
    und zu ihrem ursprünglichen Namen zurückgesetzt werden sollten.
    Allerdings gab es ein Problem, wenn ein anderer User in der Zwischenzeit diesen Namen genutzt hatte.


    Daher die Trennung von Namen und Titeln.


    Das ganze ist für den Spieler nicht sichtbar, allerdings hat es einen vorteil gegenüber dem ändern des Namen:
    Der Spieler 'Paul' kauft Premium/Vip und sein name bleibt in Mysql bei 'Paul' ingame sieht er allerdings '[P]Paul'.


    Was das ganze bringt ? Sein Name ist weiterhin 'Paul' und somit kann kein Character erstellt werden, der Paul heißt.


    Der selbe Vorteil gilt für GM's etc. Auch ihr Name kann nicht mehr kopiert werden.


    Screen:


    Bitte melden Sie sich an, um dieses Bild zu sehen.


    zum How-To:


    Server Source:


    common/tables.h


    Sucht nach:

    C: tables.h
    1. typedef struct SPlayerTable
    2. {
    3. DWORD id;
    4. char name[CHARACTER_NAME_MAX_LEN + 1];
    5. char ip[IP_ADDRESS_LENGTH + 1];


    über "char name[CHARACTER_NAME_MAX_LEN + 1];" das einfügen:


    C: table.h
    1. char title[CHARACTER_NAME_MAX_LEN + 1];

    Sollte dann so aussehen:


    C: table.h
    1. typedef struct SPlayerTable
    2. {
    3. DWORD id;
    4. char title[CHARACTER_NAME_MAX_LEN + 1];
    5. char name[CHARACTER_NAME_MAX_LEN + 1];
    6. char ip[IP_ADDRESS_LENGTH + 1];


    Als nächstes geht ihr in folgende Datei:


    db/src/ClientManagerPlayer.cpp


    Sucht nach:


    C: ClientManagerPlayer.cpp
    1. "id,name,job,voice,dir,x,y,z,map_index,exit_x,exit_y,exit_map_index,hp,mp,stamina,random_hp,random_sp,playtime,"

    Und ersetzt es mit:



    C: ClientManagerPlayer.cpp
    1. "id,title,name,job,voice,dir,x,y,z,map_index,exit_x,exit_y,exit_map_index,hp,mp,stamina,random_hp,random_sp,playtime,"


    Dann sucht ihr nach:


    C: ClientManagerPlayer.cpp
    1. strlcpy(pkTab->name, row[col++], sizeof(pkTab->name));

    und fügt das darüber ein:



    C: ClientManagerPlayer.cpp
    1. strlcpy(pkTab->title, row[col++], sizeof(pkTab->name));

    Sollte dann so aussehen:


    C: ClientManagerPlayer.cpp
    1. strlcpy(pkTab->title, row[col++], sizeof(pkTab->name));
    2. strlcpy(pkTab->name, row[col++], sizeof(pkTab->name));


    Dann geht ihr in game/src/input_db.cpp


    Und sucht nach:


    C: input_db.cpp
    1. LPCHARACTER ch = CHARACTER_MANAGER::instance().CreateCharacter(pTab->name, pTab->id);

    das ersetzt ihr duch folgendes:





    So in der Source fertig.


    jetzt noch den Sql befehl ausführen:



    SQL
    1. ALTER TABLE `player` ADD `title` varchar(24) NOT NULL DEFAULT '';


    Hier ist das DEFAULT wichtig, da ihr sonst keine Chars mehr erstellen könnt >.<


    So das wars :)


    Jetzt könnt ihr einfach in die title spalte [p] oder [SA] etc. eintragen & es wird angezeigt.


    LG Bequiet

    Hey,


    und zwar hatte ich folgende idee:


    ich würde gerne in der Tabelle player.player ein feld "title" vor den namen hängen.
    Allerdings finde ich im Source nicht, wo der Name aus der Tabelle geladen wird.


    ich würde gerne beim laden des namens einfach als Beispiel folgendes ändern:


    Code
    1. char title[LENGHT];
    2. char name[LENGHT];
    3. name = title + name;

    Ich hoffe ihr könnt mir so weit folgen :D


    wenn mir da jemand eben helfen könnte wär das echt nice :)


    LG Bequiet