Sziasztok
Jöttem láttam győztem módszerrel megcsináltam otthon a régi DoofMt2 féle GM online listát, mely úgy
működik, mint a barát lista csak ezt Questtel kell működtetni :).
Lényegében csak a questet kellett megírjam, a kliensbe való dolgokat csak átpakoltam a kliensbe :D.
A barátlistán jelenik meg egy új kis legördíthető Team 'fül', mint a barát, a céh és házasság esetén a család lista.
Online tagra kettőt kattintva előjön a PM ablak természetesen ^^ .
A témát figyelmesen olvasd el, felesleges kérdéseket kerülhetsz el vele!
Egy kép arról, hogy hogyan is néz ez ki:
--> Katt Ide <-- (http://imagerz.com/QEAXCktvAwMHBAkeEwVR)
[HOW2]
Nem készültem regényt írni, de azért leírom hogy kell beüzemelni +/- 1-2 sor :D.
1.) Szükséges fájlok: game.py / uimessenger.py
(Ha nem vagy biztos a dolgodban csinálj biztonsági másolatot a fájlokról!)
2.) Először nyisd meg game.py-t, és keress rá erre:
def __ServerCommand_Build(self):
3.) Ha megvan, add hozzá a listához ezt a két új parancsot:
##TEAM_LIST
"SetTeamOnline" : self.__TeamLogin,
"SetTeamOffline" : self.__TeamLogout,
##END_OF_TEAM_LIST
4.) Írd a következő funkciókat valahova alulra:
# TEAM_LIST
def __TeamLogin(self, name):
if self.interface.wndMessenger:
self.interface.wndMessenger.OnLogin(2, name)
def __TeamLogout(self, name):
if self.interface.wndMessenger:
self.interface.wndMessenger.OnLogout(2, name)
# END_OF_TEAM_LIST
5.) Bezárod és elmented, ez a rész kész.
6.) Most nyisd meg az uimessenger.py fájlt.
7.) Írd a 'GUILD = 1' alá a 'TEAM = 2'-t, ez csak afféle megjegyzés, hogy a 2-es szám a Team csoport indexe.
FRIEND = 0
GUILD = 1
TEAM = 2
8.) Most keress rá a következőre:
class MessengerFriendItem(MessengerMemberItem):
9.) Illeszd be az osztály alá a következő osztályt:
class MessengerTeamItem(MessengerMemberItem):
def __init__(self, getParentEvent):
MessengerMemberItem.__init__(self, getParentEvent)
def CanRemove(self):
return FALSE
def OnRemove(self):
messenger.RemoveFriend(self.key)
net.SendMessengerRemovePacket(self.key, self.name)
return FALSE
10.) Ha ez megvan keress rá erre:
class MessengerFriendGroup(MessengerGroupItem):
11.) Illeszd be az osztály alá a következő osztályt:
class MessengerTeamGroup(MessengerGroupItem):
def __init__(self, getParentEvent):
MessengerGroupItem.__init__(self, getParentEvent)
self.SetName("Team")
def AppendMember(self, key, name):
item = MessengerTeamItem(self.getParentEvent)
return MessengerGroupItem.AppendMember(self, item, key, name)
12.) Keress rá a következőre:
def __AddGroup(self):
13.) Add hozzá a következő sorokat:
member = MessengerTeamGroup(ui.__mem_func__(self.GetSelf))
member.Open()
member.Show()
self.TeamGroup = member
self.groupList.append(member)
14.) Ezzel kész a kliens része.
15.) Quest....:
A Quest már kész van, de csak három névre írtam meg magamnak teszteléshez.
A Questről fontos tudnivalók:
* A quest lényege, hogy felkerüljenek a megnevezett elemek(nevek) a játékban lévő listára,
ezt a listát belépésnél ki is írja a játék a GM listára, majd 10 másodperc mulva ráfrissít
és ha a quest szerint elérhető az 'elem' akkor azt jelzi a kliens felé és zöld képet kap a listán.
* A cmdchat('SetTeam... '..name)-ban nem véletlenül került bele az a szóköz !
* Ha bővíteni szeretnéd a listát, a következőkre figyelj!
- A karakterek nevei a listákban idézőjelekhez, vesszőkhöz(kivéve az utolsó elem) és olyan izé zárójelekhez kötöttek, ne felejtsd el!
- A gms és a t_gms lista utolsó eleméhez nem tartozik ',' azaz ne rakj vesszőt az utolsó név után!
* A loop_timer nem csak egyszeri lefutást jelent, hanem folyamatosan ismétlődő folyamatot, azaz login után minden 10-ik
másodpercben ismétlődik a folyamat.
* A quest listákra epült for-ral, if elseif else helyett.
* Bár ez nem fontos, csak egy megjegyzés, először while-lal írtam a questet, de az logolt, mint az állat ezért lett for :)
* Quest beüzemelése:
- Először is lemented egy szöveges dokumentumba, elmented gm_list vagy bármi néven .quest végződéssel,
feltöltöd Filezilla segítségével a szervered Quest mappájába, majd lefuttatod a következő paranccsal
'cd /home/game/quest && ./qc gm_list.quest' Ha ez megvan játékban '/reload q' és már kész is van ha a kliens rész is megvan ^^.
Természetesen a './qc ' után azt írod amilyen néven mentetted el a fájlt, csak a tisztán látás kedvéért.
VBoxban a '&' jel --> Shift + 6
Na szóval a Quest:
quest gm_list begin
state start begin
when login begin
local gms = {
{"[SA]Zoo"},
{"[GM]Krieger2"},
{"JustFeel2"}
}
for i=1, table.getn(gms), 1 do
local name = gms[i][1]
if name == nil then
return name
end
cmdchat('SetTeamOffline '..name)
end
loop_timer("check_gm", 10)
end
when check_gm.timer begin
local t_gms = {
{"[SA]Zoo"},
{"[GM]Krieger2"},
{"JustFeel2"}
}
for i=1, table.getn(t_gms), 1 do
local t_name = t_gms[i][1]
if t_name == nil then
return t_name
end
if game.get_event_flag(t_name) == 1 then
cmdchat('SetTeamOnline '..t_name)
else
cmdchat('SetTeamOffline '..t_name)
end
end
end
when login with pc.is_gm() begin
local name = pc.get_name()
game.set_event_flag(name, 1)
end
when logout with pc.is_gm() begin
local name = pc.get_name()
game.set_event_flag(name, 0)
end
end
end
Ha gondod van vele -annak ellenére, hogy szinte mindent leírtam- kérdezősködj a Segítség topicban,
ha valami hibát találtál, vagy esetleg én írtam volna rosszul valamit^^ írj PM-et.
Ezt az üzenetet otthon írtam meg és egy havernál tettem ki ide a fórumra >.<
Mielőtt befejeztem volna a .txt-be való írást, a fent leírt pontok alapján beüzemeltem egy alap kliensbe és működött.
Gyik aka Gyakran ismételt kérdések..
1.) Hogy tudom bővíteni a listát?:o
- Le írtam, olvasd el.
2.) Bele kell írni a quest_list fájlba a quest nevét?
- Ha akarod hogy a make.py/.sh lefutassa helyetted, akkor igen, bele.
3.) Mi az a Quest?
- Facepalm...
4.) A 'when x.timer begin'-nél miért nem '.loop_timer' kell?
- Mert a loop a folyamatos ismétlődést jelenti, de attól függetlenül még timer, és nem server_timer.
5.) Megcsináltam a kliens dolgot, de azóta nem indul.. Mit tegyek?
- Ctrl+Z... Vagy nyálazd át még 2x-3x, hátha észre veszed hol írtad el.
6.) Én Virtual PC-t használok, ott hogy kell a questet lefuttatni?
- Ugyan úgy, csak az '=' jelet nem tudom, hogy mivel hozd elő és az elérési út lehet hogy más.
7.) Köszi, köszi! Lehet egy kérdésem? / Tucc segíteni xy berakásba?
- Elvégre szólásszabadság van, kérdés az, hogy kapsz-e választ? >:D / Majd legközelebb.
Száz szónak is egy a vége azt hiszem minden fontosat leírtam szóval hajrá! ;)
Üdv, P3NG3R