[HOW2] GM-Board with Quest.

Indította [VIP]P3NG3R, 2012-05-17, 20:01:11

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

[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