Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : XP Tool



Razerds
10.11.2009, 13:55
Hi,
ich wollte Fragen ob mir jemand ein kleines XP tool basteln kann.

Es soll so laufen:
Pro Player kill 1xp geben und es soll eine anzeige geben wo steht wie viel xp mann bereits hat.
Und es soll alles über Steam id gespeichert werden.

Ich würde es gerne selber machen aber wenn es jemand für mich machen würde.
Könnte ich das Script mir mal genauer anschauen und daraus lernen ;)

Frostdead
13.11.2009, 19:37
Gib mal mehr infos

Die meisten wissen zB net was "XP" ist

Du meinst wohl so eine Art Erfahrungsleiste wie zB bei World of Warcraft oder?

oder wie?

Mitsuma
13.11.2009, 19:58
EXP meint er. :)
(Erfahrungspunkte)


Warum fragst du wenn du es weist?

Frostdead
13.11.2009, 20:00
EXP meint er. :)
(Erfahrungspunkte)

Ich weis.

Pij
13.11.2009, 20:17
Er will einfach, dass irgendwo eine Zahl ist, die sich jedes mal, wenn man einen Spieler tötet um eins erhöht. Die Werte sollen irgendwo zusammen mit den passenden SteamIDs gespeichert werden. Was kann man daran missverstehen?

monky2k6
13.11.2009, 20:49
In LUA Problemlos realisierbar für Garrysmod.
Was mich verwirrt ist der Thread-Name: XP-Tool

"Tools" sind für mich extern laufende Programme, und wieso "XP"? Also unter Vista soll es nicht laufen oder wie? o_O

Pij
13.11.2009, 20:59
XP = EXP = experience = Erfahrung

monky2k6
13.11.2009, 21:04
Ah, ja klar das ergab sich aus seinem Post, irgendwie dachte ich im Thread-Titel aufgrund des Wortes "Tool" an das Betriebssystem. :gmod: Was XP in RPGs bedeutet ist mir eigentlich auch klar ;)

Gut, jetzt verwirrt mich nur noch das Wort "Tool" :gmod:

Hidden Evil
13.11.2009, 22:40
Beitrag hinfällig, ich habe mich verlesen :bang:

Scarecrow
14.11.2009, 19:20
Was zieht'n ihr für Effekte? Ich denke mal es müsste jedem von uns 100%ig klar sein was mit "XP Tool" gemeint ist. Da muss man sich nicht direkt einscheißen...

Da er es ja gerne in Lua hätte und dann noch zu Lernzwecken, entfällt das Vorhaben mit Expression sofort, eben weil es kein Lua ist.

PS: Wenn man die Chance hat aus den Fehlern anderer zu lernen, sollte man sie auch nutzen, um nicht sinnlos Zeit damit zu verschwenden, diese Fehler selbst zu begehen. Also entweder jemand scriptet's ihm oder ihr haltet einfach die Klappe.

Hidden Evil
14.11.2009, 20:07
es müsste jedem von uns 100%ig klar sein was mit "XP Tool" gemeint ist.
Ich verwette meine Cojones, dass mindestens 50% der Leser beim Lesen des Titels sofort an WindowsXP gedacht haben als an irgend etwas anderes.


Da er es ja gerne in Lua hätte [...] entfällt das Vorhaben mit Expression sofort
Hast Recht, hatte übersehen, dass es im LUA-forum steht *grummel*


PS: Wenn man die Chance hat aus den Fehlern anderer zu lernen, sollte man sie auch nutzen, um nicht sinnlos Zeit damit zu verschwenden, diese Fehler selbst zu begehen. Also entweder jemand scriptet's ihm oder ihr haltet einfach die Klappe.
Sicher könnte es ihm jemand einfach scripten, aber ist Dir schonmal in den Sinn gekommen, dass der Lern-Effekt um ein Vielfaches höher ist, wenn man es selbst probiert? Gut, er kann den fertigen Text lesen und wohl auch verstehen, aber man prägt sich die Herangehensweise und die Erfahrung durch die Fehler nicht ein, weil sie einfach nicht vorhanden war.

Und dann soll sich auch keiner mehr beschweren über die Faulheit derer, die immer nur etwas haben wollen ohne sich selbst darüber Gedanken zu machen. (@Razerds: War jetzt nicht auf Dich bezogen! Du hast ja selbst gesagt, dass Du daraus lernen willst und das ist ein Unterschied zu denen, die man hier recht häufig sieht.)

Pij
14.11.2009, 21:02
Ich verwette meine Cojones, dass mindestens 50% der Leser beim Lesen des Titels sofort an WindowsXP gedacht haben als an irgend etwas anderes.

Wenn man natürlich eine Antwort schreibt, nachdem man den Threadtitel, nicht aber den ersten Post gelesen hat, ist das schon klar...


Sicher könnte es ihm jemand einfach scripten, aber ist Dir schonmal in den Sinn gekommen, dass der Lern-Effekt um ein Vielfaches höher ist, wenn man es selbst probiert?
Das hast du doch für ihn gar nicht zu entscheiden.

Hidden Evil
14.11.2009, 22:14
Wenn man natürlich eine Antwort schreibt, nachdem man den Threadtitel, nicht aber den ersten Post gelesen hat, ist das schon klar...
Mag sein, aber der Titel ist das erste, das man bei einem Thread sieht. Ist dieser nicht aussagekräftig oder entspricht nicht dem, was man meint gehen potentielle Helfer verloren.


Das hast du doch für ihn gar nicht zu entscheiden.
Nein, sicher nicht, aber es ist eine psychologische Tatsache.

Aber wie ich sagte, braucht man dann nicht mehr auf denen rumzuhacken, die immer alles haben wollen und sich selbst zuvor keine Gedanken machen.

Aber ich finde, der Thread wurde genug zerrissen (ja, auch von mir), was er meinte ist ja nun allen klar geworden.

Scarecrow
14.11.2009, 22:18
...haltet einfach die Klappe.

Was versteht man daran nicht? Wenn es Diskussionsbedarf gibt, dann ab damit in den allg. Thread oder ICQ und was weiß ich, aber bitte nich hier.

Alex22
15.11.2009, 23:01
Wie auch immer, das Script ist ziemlich leicht zu realisieren. Schreibs vielleicht später schnell aber im grunde genommen einfach nur n PlayerDeath Hook mit ner Funktion die ne Zahl immer + 1 macht und in abspeichert.

Alex22
19.11.2009, 09:20
Ah, hatte total vergessen es zu posten:

lua/autorun/server/sv_XPCounter.lua
function PlayerCounter(victim,weapon,killer) //Wenn man einen Spieler getötet hat
if killer:IsPlayer() then //Sonst würde er auch versuchen es zu speichern, wenn ein NPC einen Spieler tötet
local path = "XPCounter/" .. killer:SteamID() .. ".txt" //Damit ich nich immerwieder den Pfad zur Datei schreiben muss
if !file.Exists(path) then //Wenn es noch keine EXP Datei für den Spieler gibt, dann:
file.Write(path, 1)
SendEXP(killer,1) //Die Zahl soll zum Client geschickt werden
else //sonst soll er die Datei auslesen und mit der Zahl + 1 rechnen
fileData = tonumber(file.Read(path)) //Da file.Read einen String aus gibt und man arithmetische Operationen nur auf Zahlen ausüben kann, muss man ihn zuerst in eine Zahl umwandeln
fileData = fileData + 1
file.Write(path,fileData) //Datei wird wieder abgespeichert
print("Kills: " .. fileData)
SendEXP(killer,fileData)
end
end
end

function NPCCounter(npc,killer) //Für NPCs
if killer:IsPlayer() then
local path = "XPCounter/" .. killer:SteamID() .. ".txt"
if !file.Exists(path) then
file.Write(path, 1)
SendEXP(killer,1)
else
fileData = tonumber(file.Read(path))
fileData = fileData + 1
file.Write(path,fileData)
print("Kills: " .. fileData)
SendEXP(killer, fileData)
end
end
end

function SendEXP(ply,EXP)
local rp = RecipientFilter() //Recipient Filter sind für Usermessages nötig, damit er weiß an wen er die Usermessage alles schicken soll
rp:AddPlayer(ply) //in diesem fall natürlich nur an den einen
print("Sending EXP...")
umsg.Start("SendEXP", rp)
umsg.Short(EXP) //Die Erfahrungspunkte werden als eine Short Variable gesendet
umsg.End()
end
hook.Add("PlayerDeath", "PlyEXPCounter", PlayerCounter)
hook.Add("OnNPCKilled", "NPCEXPCounter", NPCCounter)
hook.Add( "PlayerInitialSpawn", "InitialEXPSending", SendEXP)

lua/autorun/client/cl_XPCounter.lua
function DrawEXP()
local Percentage = string.sub(tostring(EXP), string.len(tostring(EXP)) - 1) //Da jedes Level immer 100 EXP brauch, bentuzt der immer nur die letzten beiden Ziffern von der insgesamten EXP als Prozent
draw.RoundedBox(6,10,10,204,24, Color(0,0,0,255)) //Schwarze Umrandung
draw.RoundedBox(6,12,12,200,20,Color(153,204,204,2 55)) //Hellblauer Innenbereich
draw.RoundedBox(6,12,12,tonumber(Percentage * 2),20,Color(0,153,204,255)) //Dunkelblauer Fortschritt
// **Level und EXP Schrift**
draw.SimpleTextOutlined(Percentage .. "/100", "ScoreboardText",80,13,Color(255,255,255,255),TEXT_ALIGN_LEFT, TEXT_ALIGN_LEFT,1,Color(0,0,0,255))
draw.SimpleTextOutlined("Level: "..math.floor(EXP / 100), "ScoreboardText",80,36,Color(255,255,255,255),TEXT_ALIGN_LEFT, TEXT_ALIGN_LEFT,1,Color(0,0,0,255))
end

function RecieveEXP(um)
EXP = um:ReadShort() //EXP wird mit dem gesendeten Wert deklariert
end
hook.Add("HUDPaint", "EXPDraw", DrawEXP)
usermessage.Hook("SendEXP", RecieveEXP) //Usermessage Hook für die Erfahrungspunkte

Ist vermutlich nicht das beste Lernbeispiel da ich den OnInitialSpawn Hook irgendwie umgehen hätte können aber naja. Das Script zeigt oben links ne Experience Bar immer von eins bis hundert an, jedesmal wenn man einen NPC oder Player tötet geht es um eins hoch, alle 100 EXP gibts n neues Level.

Natürlich nicht im geringstem n schönes Level bzw. EXP System und für das Speichern hätte ich auch alles in eine Datei packen können und dann n Parser schreiben, hatte dazu aber jetzt keine lust.

http://img2.abload.de/img/19.11yo4q.png

Scarecrow
19.11.2009, 12:23
Wo ist'n da der Usermessage-Hook? :gmod:

PS: Da müsste beim Client ja noch


usermessage.Hook("SendEXP", ReceiveEXP)

stehen. Hast du bestimmt vergessen zu kopieren ;)

Alex22
19.11.2009, 13:38
Wo ist'n da der Usermessage-Hook? :gmod:

PS: Da müsste beim Client ja noch


usermessage.Hook("SendEXP", ReceiveEXP)

stehen. Hast du bestimmt vergessen zu kopieren ;)

Ah, danke.

Hab direkt noch alles schnell auskommentiert.