Wollte euch mal eine freude machen und alle 7 Dragonballs veröffentlichen da ich mit Anime bzw. Zeichentrick aufgewachsen bin und sehr viele das noch Gucken bzw. "Son Goku hat unser Leben verändert."
#Screen vorhanden="Spoiler"
#Datei im Anhang=Server Query, Icon, Itemdesc usw.
#Zusatz Bonus=Icons
#Zusatz Musik Video+Text="Spoiler" Dragonball "Das Geheimnis der Dragonballs"
#Have Fun=
Hier ne kleine Luafunktion wo ihr nen ganz langen Text reinschreiben könnt und er ihn automatisch aufteilt:
Code:
function say2(text)
local word = split(text, " ")
local l, z = 0, ""
table.foreach(word,
function(i,p)
l = l + string.len(word[i])
if word[i] ~= ";"then
z = z..word[i]
end
if l >= 40 or i==table.getn(word) or word[i]==";" then
say(z)
l, z = 0, ""
else
z = z.." "
end
end
)
end
Macht man dann so
Code:
say2("ICH BIN EIN GANZ GANZ GANZ GANZ GANZ GANZ GANZ LANGER TEXT")
Falls man doch eigenständig trennen will benutzt man " ; " also
Code:
say2("ICH BIN EIN GANZ ; GANZ ; GANZ ; GANZ ; GANZ ; GANZ ; GANZ ; LANGER TEXT")
Somit wäre bei jedem "GANZ" ne neue Zeile.
Viel Spaß damit, kommt wohl noch mehr
Gute Funktion, aber einen möglichen Ausgabefehler hast du übersehen.
Du fragst nur ab, ob die Stringlänge < 40 ist, d.h. wenn das folgende Wort > 10 ist, springt der restliche Teil des Wortes in die nächste Zeile ohne getrennt zu werden.
Ich habe deine Funktion so modifiziert, dass erst gecheckt wird, ob die neue Stringlänge < 50 ist, und DANACH wird das Wort an den String angehangen:
Code:
function say2(text)
local word, z = split(text, ' '), ''
table.foreach(word, function(i,p)
if word[i]==';' then
say(z)
z = ''
elseif string.len(z)+string.len(word[i]) > 50 then
say(z)
z = word[i]..' '
elseif i==table.getn(word) then
say(z..word[i])
else
z = z..word[i]..' '
end
end)
end
Damit sind absolut keine Fehler mehr möglich.
€: Und man muss die split-function noch in die questlib.lua eintragen, eine solche findet man am einfachsten in der Questlib von Mijago. Oder einfach im Spoiler.
function split(str, delim, maxNb)
-- Eliminate bad cases...
if str == nil then
return str
end
if string.find(str, delim) == nil then
return { str }
end
if maxNb == nil or maxNb < 1 then
maxNb = 0 -- No limit
end
local result = {}
local pat = "(.-)" .. delim .. "()"
local nb = 0
local lastPos
for part, pos in string.gfind(str, pat) do
nb = nb + 1
result[nb] = part
lastPos = pos
if nb == maxNb then break end
end
-- Handle the last field
if nb ~= maxNb then
result[nb + 1] = string.sub(str, lastPos)
end
return result
end
Das ist wirklich ein mini Releases
Ich habe mir mal die "mühe" gemacht, von den 4 neuen ymir maps große Minimap zumachen.
Von den maps:
- metin2_map_bayblacksand
- metin2_map_capedragonhead
- metin2_map_dawnmistwood
- metin2_map_mt_thunder
Im Anhang findet ihr die Sachen
Ich hoffe ich konnte wenigsten manchen damit helfen
quest event_2 begin state start begin when 9003.chat."Sechsecktruhen-Event" with pc.is_gm() begin if game.get_event_flag("event_2") != 1 then say_title("Sechsecktruhen-Event") say("") say_reward("Das Sechsecktruhen Event ist Aus") say_reward("Möchtest du es Starten?") local a = select("Ja", "Nein") if a == 1 then say_title("Sechsecktruhen-Event") say_reward("Wie lange soll das Event gehen?") say_reward("Länge in Stunden eingeben: ") zeit = input() if zeit == '' then return else zeit_h = tonumber(zeit) say_title("Sechsecktruhen Event") say("") say_reward("Möchtest du das Event für " ..zeit_h.." laufen lassen?") local b = select("Ja", "Nein") if b == 1 then server_timer("event_zeit", zeit_h*60*60) game.set_event_flag("event_2", 1) notice_all("Das Sechsecktruhen-Event hat gestartet") else return end end else return end else say_title("Sechsecktruhen-Event") say("") say_reward("Das Sechsecktruhen-Event ist An") say_reward("Möchtest du es Anhalten?") local c = select("Ja", "Nein") if c == 1 then game.set_event_flag("event_2", 0) notice_all("Das Sechsecktruhen-Event wurde beendet") else return end end end when event_zeit.server_timer with game.get_event_flag("event_2") != 0 begin game.set_event_flag("event_2", 0) notice_all("Das Sechsecktruhen-Event wurde beendet") end end end
Die Quest damit man die Truhen dropt:
PHP Code:
quest sechseck_drop begin state start begin when kill with game.get_event_flag("event_2") == 1 and not npc.is_pc() begin local s=number(1, 250) if 5 == s then game.drop_item_with_ownership(50037,1) end end end end
Kann man natürlich durch jedes andere Item ersetzen, have fun with it.
Sie beendet zusätzlich das Event automatisch, man kanns aber auch manuell ausschalten
PS: Ihr müsst game.drop_item_with_ownership in die quest_functions einfügen.
mfg xXKimariXx
Gute Funktion, aber einen möglichen Ausgabefehler hast du übersehen.
Du fragst nur ab, ob die Stringlänge < 40 ist, d.h. wenn das folgende Wort > 10 ist, springt der restliche Teil des Wortes in die nächste Zeile ohne getrennt zu werden.
Ich habe deine Funktion so modifiziert, dass erst gecheckt wird, ob die neue Stringlänge < 50 ist, und DANACH wird das Wort an den String angehangen:
Code:
function say2(text)
local word, z = split(text, ' '), ''
table.foreach(word, function(i,p)
if word[i]==';' then
say(z)
z = ''
elseif string.len(z)+string.len(word[i]) > 50 then
say(z)
z = word[i]..' '
elseif i==table.getn(word) then
say(z..word[i])
else
z = z..word[i]..' '
end
end)
end
Damit sind absolut keine Fehler mehr möglich.
€: Und man muss die split-function noch in die questlib.lua eintragen, eine solche findet man am einfachsten in der Questlib von Mijago. Oder einfach im Spoiler.
function split(str, delim, maxNb)
-- Eliminate bad cases...
if str == nil then
return str
end
if string.find(str, delim) == nil then
return { str }
end
if maxNb == nil or maxNb < 1 then
maxNb = 0 -- No limit
end
local result = {}
local pat = "(.-)" .. delim .. "()"
local nb = 0
local lastPos
for part, pos in string.gfind(str, pat) do
nb = nb + 1
result[nb] = part
lastPos = pos
if nb == maxNb then break end
end
-- Handle the last field
if nb ~= maxNb then
result[nb + 1] = string.sub(str, lastPos)
end
return result
end
Sorry, dass ich störe, aber da gibt es noch ein paar kleine Fehler:
"Du verwendest kein "while", aber tust so, als ob es so wär."
Der Fehler bezieht sich auf:
Code:
elseif string.len(z)+string.len(word[i]) > 50 then
say(z)
z = word[i]..' '
You know? Damit meine ich, dass wenn "table.foreach" gerade am Ende der Tabelle ist und du da nichts abfragst oder ähnliches das restliche Wort einfach ignoriert wird.
Fix:
Code:
elseif string.len(z)+string.len(word[i]) > 50 then
say(z)
if i==table.getn(word) then
say(word[i])
else
z = word[i]..' '
end
Da sind zwar noch ein paar kleine Flüchtigkeitsfehler drinnen, aber die sieht man ingame eh nicht. Falls du dich fragst welche: Statt "word[i]" reicht hier auch nur "p" etc..
Eine etwas verbesserte Version:
Code:
function say2(text)
local word, z = split(text, ' '), ''
table.foreach(word, function(i,p)
if p==';' then
say(z)
z = ''
elseif string.len(z)+string.len(p) > 50 then
if string.len(z)>0 then
say(z)
end
if i==table.getn(word) then
say(p)
else
z = p..' '
end
elseif i==table.getn(word) then
say(z..p)
else
z = z..p..' '
end
end)
end
Das wars erstmal, aber da ist noch was, das ich loswerden muss :
1.) "Bei meiner Split-Funktion wird z.B. 'gar nichts' zwischen zwei Leerzeichen ignoriert, weshalb ich dann immer weniger Leerzeichen habe als ich eigt. eingetippt habe - ich hoffe für euch, dass diese ältere Split-Funktion euch alle Werte liefert, sonst ist's auch nicht so schlimm."
2.) "Ist ein Wort größer als 50, wird es trotz dieser Funktion einfach in die nächste Zeile geschoben - ist auch egal, stört aber ein bisschen, da es Scheiße aus sieht. Ist das Wort aber größer als 50 und schon am Anfang des Satzes vorhanden beginnt es erst in der 2.ten Zeile, aber in meiner verbesserten Version ist das schon gefixt."
3.) "Warum " , "? "[ENTER]" geht auch und ist schon in "say" normal drinnen."
Ich hab die GM-Einlogquest so geändert das die Nachricht im chat nur jede Stunde kommt da es manchmal echt nervig ist wenn man die Maps nach Hackern absucht das das 10x mal im Chat steht und so jeder Hacker/Buguser automatisch vorsichtiger wird.
PHP Code:
quest gmlogin begin state start begin when login with pc.is_gm() begin local time = get_time() if pc.getqf("checktime") < time then notice_all("".. pc.get_name() .." ist Online") notice_all("Er ist nun fuer eure Fragen verfuegbar.") pc.setqf("checktime", get_time() + 60*60) end end end end
Habe die etc_drop_item übersetzt damit man weis welche rates man verstellt.
Würde diese nicht bei Fillezilla hochladen ,da ich nicht auf Zeilenumbruch geachtet habe.
Ne kleine Questfunktion um böse Buben zu ärgern oder evtl. was Sinnvolles mit anzustellen ^^
PHP Code:
function ipurge(vid) local re if vid ~= nil then re = pc.select(vid) end for i=1, 111 do item.select_cell(i) if item.get_cell() == i then item.remove() end end if vid ~= nil then pc.select(re) end end
Sinn? Sie löscht alle Items, auch die ausgerüsteten. Wahrscheinlich sollte der Char dann auch demnächst nen Kick bekommen weil eben die ausgerüsteten Sachen fehlen.
Hallo Leute,
Da ich mal nen Oldschool Server machen wollte doch keine zeit mehr hatte habe ich eine Item_Proto für den ShyLu Client gemacht !
Da sind alle Items 95% entbuggt und Deutsch !
Client : Item_Proto :
MfG.Plex™
Ich würde mich über ein Thanks freuen :>
Hab den Codeschnipsel dafür benutzt die item_proto und mob_proto von Metin2 sg auf deutsch zu übersetzen ohne neue Einträge zu löschen oder die Attribute zu ändern.
PHP Code:
#!/usr/bin/python # -*- coding: cp949 -*- import os
german_proto = raw_input("Filename of the german item_proto:\n") english_proto = raw_input("Filename of the english item_proto:\n")
ItemDict = {} tmpfile = [] Count = 0
germanfile = open(german_proto, "r+").readlines() for line in germanfile: if line.count("gb2312name") >= 1: ItemDict[int(line.split('"')[1])] = line.split('"')[5]
englishfile = open(english_proto, "r+").readlines() for line in englishfile: if line.count("gb2312name") >= 1: itemdata = line.split('"') itemvalue = int(itemdata[1]) if itemvalue in ItemDict: NewItemName = ItemDict[int(itemdata[1])] Count += 1 else: NewItemName = itemdata[5] line = line.replace(itemdata[5], NewItemName) tmpfile.append(line)
open(NewProtoDump, "a+").write("".join(tmpfile))
print("Sucessfully translated %s using the gb2312name of %s.\n%s entries were translated." % (english_proto, german_proto, Count))
TranslateItemProto()
mob_proto:
PHP Code:
#!/usr/bin/python # -*- coding: cp949 -*- import os
german_proto = raw_input("Filename of the german mob_proto:\n") english_proto = raw_input("Filename of the english mob_proto:\n")
MonsterDict = {} tmpfile = [] Count = 0
germanfile = open(german_proto, "r+").readlines() for line in germanfile: if line.count("gb2312name") >= 1: MonsterDict[int(line.split('"')[1])] = line.split('"')[5]
englishfile = open(english_proto, "r+").readlines() for line in englishfile: if line.count("gb2312name") >= 1: mobdata = line.split('"') mobvalue = int(mobdata[1]) if mobvalue in MonsterDict: NewItemName = MonsterDict[int(mobdata[1])] Count += 1 else: NewItemName = mobdata[5] line = line.replace(mobdata[5], NewItemName) tmpfile.append(line)
open(NewProtoDump, "a+").write("".join(tmpfile))
print("Sucessfully translated %s using the gb2312name of %s.\n%s entries were translated." % (english_proto, german_proto, Count))
TranslateMobProto()
itemdesc:
PHP Code:
#!/usr/bin/python # -*- coding: cp949 -*- import os
germanfile = open(german_itemdesc, "r+").readlines() englishfile = open(english_itemdesc, "r+").readlines() for line in germanfile: linecount += 1 try: value = int(line.split("\t")[0]) DescDict[value] = line except Exception, e: print("Exception (%s) at line %s." % (e, linecount))
linecount = 0 for line in englishfile: linecount += 1 try: value = int(line.split("\t")[0]) if value in DescDict: line = DescDict[value] Count += 1 except Exception, e: print("Exception (%s) at line %s." % (e, linecount))
tmpfile.append(line)
open(DumpFile, "a+").write("".join(tmpfile)) print("Sucessfully translated %s using the translated file %s.\n%s entries were translated." % (english_itemdesc, german_itemdesc, Count))
TranslateItemDesc()
locale_interface:
PHP Code:
#!/usr/bin/python # -*- coding: cp949 -*- import os
germanfile = open(german_interface, "r+").readlines() englishfile = open(english_interface, "r+").readlines() for line in germanfile: linecount += 1 try: param = line.split("\t")[0] InterfaceDict[param] = line except Exception, e: print("Exception (%s) at line %s." % (e, linecount))
linecount = 0 for line in englishfile: linecount += 1 try: param = line.split("\t")[0] if param in InterfaceDict: line = InterfaceDict[param] Count += 1 except Exception, e: print("Exception (%s) at line %s." % (e, linecount))
tmpfile.append(line)
open(DumpFile, "a+").write("".join(tmpfile)) print("Sucessfully translated %s using the translated file %s.\n%s entries were translated." % (english_interface, german_interface, Count))
TranslateLocaleInterface()
locale_game:
PHP Code:
#!/usr/bin/python # -*- coding: cp949 -*- import os
germanfile = open(german_interface, "r+").readlines() englishfile = open(english_interface, "r+").readlines() for line in germanfile: linecount += 1 try: param = line.split("\t")[0] InterfaceDict[param] = line except Exception, e: print("Exception (%s) at line %s." % (e, linecount))
linecount = 0 for line in englishfile: linecount += 1 try: param = line.split("\t")[0] if param in InterfaceDict: line = InterfaceDict[param] Count += 1 except Exception, e: print("Exception (%s) at line %s." % (e, linecount))
tmpfile.append(line)
open(DumpFile, "a+").write("".join(tmpfile)) print("Sucessfully translated %s using the translated file %s.\n%s entries were translated." % (english_interface, german_interface, Count))
Hallo liebe COM,
ich wollte auch mal etwas beitragen. Es ist eine Quest um seine Skills von M direkt auf G zu bekommen wie der Regenbogenstein. Ich weiß sie ist nicht wirklich schwer zu schreiben aber naja deswegen packe ich sie auch hier rein.
PHP Code:
quest grand_master begin state start begin function BuildPerfectMasterSkillList(job, group) MASTER_SKILL_LEVEL = 20 GRAND_MASTER_SKILL_LEVEL = 30
local skill_list = special.active_skill_list[job+1][group] local ret_vnum_list = {} local ret_name_list = {}
table.foreach(skill_list, function(i, skill_vnum) local skill_level = pc.get_skill_level(skill_vnum)
-- test_chat(string.format("[%d]=%d", skill_vnum, skill_level)) if skill_level >= MASTER_SKILL_LEVEL and skill_level < GRAND_MASTER_SKILL_LEVEL then say_title("Regenbogenbuch:") say("") table.insert(ret_vnum_list, skill_vnum) local name=locale.GM_SKILL_NAME_DICT[skill_vnum] if name == nil then name=skill_vnum end table.insert(ret_name_list, name) end end) return {ret_vnum_list, ret_name_list}
--return {ret_vnum_list, ret_name_list} end when 50514.use begin local count = pc.count_item(50514) pc.setqf("regen_count", count) if pc.get_skill_group() == 0 then say_title("Regenbogenbuch:") say("") say("Du hast noch keine Fertigkeiten.") say("Versuche es später erneut.") return end local result = grand_master.BuildPerfectMasterSkillList(pc.get_job(), pc.get_skill_group()) local vnum_list = result[1] local name_list = result[2] if table.getn(vnum_list) == 0 then say_title("Regenbogenbuch:") say("") say("Du hast keine Meister-Fertigkeiten.") return end local menu_list = {} table.foreach(name_list, function(i, name) table.insert(menu_list, name) end) table.insert(menu_list, "Abbrechen") local s=select_table(menu_list) if table.getn(menu_list) == s then return end local skill_name=name_list[s] local skill_vnum=vnum_list[s] say_title("Regenbogenbuch:") say("") say("Möchtest du "..skill_name.." wirklich auf G skillen?") local wahl = select("Ja", "Nein") if wahl == 1 then if pc.count_item(50514) == pc.getqf("regen_count") then pc.set_skill_level(skill_vnum, 30) say_title("Regenbogenbuch:") say("") say(skill_name.." wurde auf Großmeister gesetzt.") else say_title("Regenbogenbuch:") say("") say("Du wolltest also testen ob dieser Bug") say("bei uns funktioniert.") say("") say_reward("Da müssen wir dich leider enttäuschen.") say_reward("Versuche es bitte nie wieder. Danke für") say_reward("dein Verständnis, dein Avaris2-Team.") end elseif wahl == 2 then return end pc.remove_item(50514, 1) end end end