[Dzielę Pliki]Vote NPC

Zaczęty przez Matim, Marzec 30, 2009, 09:59:02 PM

Poprzedni wątek - Następny wątek

Matim

Ciekawy NPC , który może pomóc przy zdobyciu kilku głosów więcej . Otóż owy NPC biega dookoła Giran Square i prosi o Vote ( Vote czyli głosy na toplistach ) Zatrzymuje się w 4 rogach i wymawia swój tekst , zmienia położenie co 10 sec .




Tekst NPC :







Html NPC : ( po naciśnięciu na NPC )






Biegający NPC :






Kierunki biegu NPC :






Ok , ale jeśli chce zmienić trajektorie jego ruchów ?

Odpowiedź jest bardzo prosta . Zrobienie takiego NPC jest bardzo proste do czego wykorzystamy tabele 'Walker_routes' W tabeli tej , definiujemy co dany NPC może powiedzieć lub gdzie się udać w jakich odstępach czasowych . Walker routes dla tego NPC wygląda tak :

INSERT INTO `walker_routes` (`route_id`, `npc_id`, `move_point`, `chatText`, `move_x`, `move_y`, `move_z`, `delay`, `running`) VALUES
(43, 888823, 1, 'Please ! Vote for Us now !', 82718, 149312, -3471, 10, 1),
(43, 888823, 2, 'Prosze ! Glosuj na nasz server !', 82713, 147899, -3471, 10, 1),
(43, 888823, 3, 'Please ! Vote for Us now !', 81153, 147904, -3471, 10, 1),
(43, 888823, 4, 'Prosze ! Glosuj na nasz server !', 81158, 149316, -3471, 10, 1);


Wyjaśnienie :

Cytat43
- jest to ID 'walker_routes' , czyli jeśli dodajemy nowego NPC walkera to podajemy ID wyższe o jeden niż wyżej w tabeli

Cytat888823
- w tym przypadku jest to ID NPC , do którego owy walker się odnośi

Cytat1,2,3,4
- są to kolejne ruchy , teksty - zaczynamy od 1 , dodając kolejne

Cytat'Please ! Vote for Us now !'
- tutaj podajemy jaki test ma napisać NPC

Cytat82718, 149312, -3471,
- lokacja , do której ma przejść NPC

Cytat10
- odstęp w sekundach , po których NPC wykona nową czynność ( napisze tekst lub przejdzie do innego miejsca )

Cytat1
- tu dajemy zawsze jedynke




Ok , ale jeśli chce aby NPC jedynie chodził lub tylko mówił ?

W takim wypadku w miejsce tekstu pisujemy null , czyli przykładowo :

(43, 888823, 1, 'null', 82718, 149312, -3471, 10, 1),

W tym wypadku NPC jedynie uda się do danej lokacji w odstępie 10 sekund




Ok , myślę , że wszystko jest w miarę zrozumiałe . Jeśli nie to proszę pisać w tym temacie . Co do NPC , których ruch lub to co powiedzą będzie uzależnione od różnych czynników ( np gdy ktoś uderzy NPC ) napiszę w późniejszym czasie , a więc spokojnie




Przygotował : Matim - Ja  :P

Pobierz : Click (Updated 12.07.09)

Jeżeli ktoś będzie miał błędy przy wgrywaniu pliku .sql ( a dokładnie błąd informujący o duplikacji NPC ID , powinien pozmieniać ID! ) Pliki pod L2JFree , jeśli ktoś chce to musi sobie trochę zmienić jeśli będą błędy na innych L2J'tach

Xyber

#1
Mógłbyś zuploadować na inny hosting, bo ostatnio mam problemy z RS

CytatYour IP address 89.78.xx.xxx is already downloading a file. Please wait until the download is completed.

Najlepsze jest to, że nic nie ściągam ;)

I jest mały błąd w HTM masz napisane "codec" a powinno być chyba "code" :)

Matim

Proszę : Click

/edit . Ok dzięki za poprawkę  :P

Maniac

Ładnie Matim, ale dlaczego taki spam ? nie lepiej delay 240 ?  :elf_5_3:

//offtop gdzie mozna te emoty dostac? ^^
Lineage 2 Enigma is coming, most epic polish server ever!

Matim

To tylko przykładowy NPC  :D Kto chce to sobie zmieni ( napisałem jak w pierwszym poście ) Ale chyba faktycznie masz racje , że trochę za często to dałem  :P

Soul

Takiego często-mówiącego, to do jaila i niech regulamin krzyczy :D
Prepare for unforeseen consequences...

Xyber

Cytat: Soul w Kwiecień 02, 2009, 05:26:12 PM
Takiego często-mówiącego, to do jaila i niech regulamin krzyczy :D

Haha genialne xD

Matim

Nom , prosto takiego zrobić ( taki chyba jest na Passion , prawda ? ) W x/y/z wstawić null i robić teksty . Dobry pomysł  :D

Sebal

#8
Matim sry za offtop, ale Ty masz takiego neta w domu ? Btw. taki npc co wsadza do jaila to fany pomysł, oj fajny ;d

/Matim - ano taki  :D
Sebal- Life ...

▬▬▬▬▬▬▬▬▬▬▬ஜ۩۞۩ஜ▬▬▬▬▬▬▬▬▬▬▬▬▬

SHUT UP AND ENJOY THE MUSIC

▬▬▬▬▬▬▬▬▬▬▬ஜ۩۞۩ஜ▬▬▬▬▬▬▬▬▬▬▬▬▬

Soul

Mhm. Żeby nie było, że to mój pomysł. W każdym razie strasznie wkurza ;)
Prepare for unforeseen consequences...

Matim

#10
Link poprawiony , brakowało linijek w pliku .sql .

Pobierz

Andronicus

Proszę o nowy link ( tylko nie Rapid ) do pliku

space


stanus

a da sie zrobić żeby taki npc przeskakiwał z miasta do miasta, w każdym biegał po określonych ścieżkach przez pół godziny i tp do nastpępnego?

Maniac

#14
Postaw npcki w miastach beda krzyczec zeby glosowali w kazdym z miast
@ Matim z tego co ja pamietam ten npc ktorego tutaj przedstawiles z " Coded by Matim " zostal dawno temu napisany przez kogos z for l2jfree, nice credit stealing  :dw_3_2:
package ai.individual;

import java.util.Calendar;
import java.util.List;
import javolution.util.FastList;

import net.sf.l2j.Config;
import net.sf.l2j.gameserver.ThreadPoolManager;
import net.sf.l2j.gameserver.instancemanager.TownManager;
import net.sf.l2j.gameserver.model.actor.L2Character;
import net.sf.l2j.gameserver.model.actor.L2Npc;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
import net.sf.l2j.gameserver.model.quest.Quest;
import net.sf.l2j.gameserver.model.zone.type.L2TownZone;
import net.sf.l2j.gameserver.network.clientpackets.Say2;
import net.sf.l2j.gameserver.network.serverpackets.NpcSay;
import net.sf.l2j.util.Rnd;

public class VoteNpc extends Quest

{
private static final int VoteNpc_GLUDIO = 9999991; // Gludio
private static final int VoteNpc_DION = 9999992; // Dion
private static final int VoteNpc_GIRAN = 9999993; // Giran
private static final int VoteNpc_OREN = 9999994; // Oren
private static final int VoteNpc_ADEN = 9999995; // Aden
private static final int VoteNpc_INNADRIL = 9999996; // Innadril
private static final int VoteNpc_GODDARD = 9999997; // Goddard
private static final int VoteNpc_RUNE = 9999998; // Rune
private static final int VoteNpc_SCHUTTGART = 9999999; // Schuttgart

List<L2Npc> _npcs = new FastList<L2Npc>();

private static final String[] dlog =
{
"Vote for our server!"
};

public VoteNpc(int questId, String name, String descr)
{
super(questId, name, descr);

// Register Events
addEventId(VoteNpc_GLUDIO, Quest.QuestEventType.ON_SPAWN);
addEventId(VoteNpc_DION, Quest.QuestEventType.ON_SPAWN);
addEventId(VoteNpc_GIRAN, Quest.QuestEventType.ON_SPAWN);
addEventId(VoteNpc_OREN, Quest.QuestEventType.ON_SPAWN);
addEventId(VoteNpc_ADEN, Quest.QuestEventType.ON_SPAWN);
addEventId(VoteNpc_INNADRIL, Quest.QuestEventType.ON_SPAWN);
addEventId(VoteNpc_GODDARD, Quest.QuestEventType.ON_SPAWN);
addEventId(VoteNpc_RUNE, Quest.QuestEventType.ON_SPAWN);
addEventId(VoteNpc_SCHUTTGART, Quest.QuestEventType.ON_SPAWN);

scheduleBroadcast();
}

@Override
public String onSpawn(L2Npc npc)
{
if (!_npcs.contains(npc))
_npcs.add(npc);

return super.onSpawn(npc);
}

private void scheduleBroadcast()
{
Calendar cal = Calendar.getInstance();
int tfhTime = cal.get(Calendar.HOUR_OF_DAY);
long currTime = tfhTime*3600000 + cal.get(Calendar.MINUTE)*60000 +
cal.get(Calendar.SECOND)*1000 + cal.get(Calendar.MILLISECOND);

long nextTime = 0;
if ((tfhTime + 1) > 24) nextTime = 6900000;
else if (cal.get(Calendar.MINUTE) < 55) nextTime = tfhTime*3600000 + 3300000;
else nextTime = (tfhTime + 1)*3600000 + 3300000;
long initial = nextTime-currTime;
ThreadPoolManager.getInstance().
scheduleGeneralAtFixedRate(new BroadcastToZone(), initial, 3600000L);

}

public static void main(String[] args)

    {
new VoteNpc(-1,"VoteNpc","ai");

    }

class BroadcastToZone implements Runnable
{
@Override
public void run()
{
for (L2Npc npc : _npcs)
{
if (npc != null)
{
if (Config.DEBUG)
_log.info("Broadcasting VoteNpc Message to Zone");

int dg = Rnd.get(0, 2);

NpcSay ns = new NpcSay(npc.getObjectId(), Say2.SHOUT, npc.getNpcId(), dlog[dg]);

L2TownZone town = TownManager.getTown(npc.getX(), npc.getY(), npc.getZ());
{
if (town.getCharactersInside() != null && !town.getCharactersInside().isEmpty())

{
for (L2Character obj : town.getCharactersInside().values())
{
if (obj == null)
continue;
if (obj instanceof L2PcInstance)
obj.sendPacket(ns);
}
}
}
}
}
}
}
}
Lineage 2 Enigma is coming, most epic polish server ever!

Matim

Cytat: Maniac w Styczeń 23, 2010, 02:00:08 PM
Postaw npcki w miastach beda krzyczec zeby glosowali w kazdym z miast
@ Matim z tego co ja pamietam ten npc ktorego tutaj przedstawiles z " Coded by Matim " zostal dawno temu napisany przez kogos z for l2jfree, nice credit stealing  :dw_3_2:
package ai.individual;

import java.util.Calendar;
import java.util.List;
import javolution.util.FastList;

import net.sf.l2j.Config;
import net.sf.l2j.gameserver.ThreadPoolManager;
import net.sf.l2j.gameserver.instancemanager.TownManager;
import net.sf.l2j.gameserver.model.actor.L2Character;
import net.sf.l2j.gameserver.model.actor.L2Npc;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
import net.sf.l2j.gameserver.model.quest.Quest;
import net.sf.l2j.gameserver.model.zone.type.L2TownZone;
import net.sf.l2j.gameserver.network.clientpackets.Say2;
import net.sf.l2j.gameserver.network.serverpackets.NpcSay;
import net.sf.l2j.util.Rnd;

public class VoteNpc extends Quest

{
private static final int VoteNpc_GLUDIO = 9999991; // Gludio
private static final int VoteNpc_DION = 9999992; // Dion
private static final int VoteNpc_GIRAN = 9999993; // Giran
private static final int VoteNpc_OREN = 9999994; // Oren
private static final int VoteNpc_ADEN = 9999995; // Aden
private static final int VoteNpc_INNADRIL = 9999996; // Innadril
private static final int VoteNpc_GODDARD = 9999997; // Goddard
private static final int VoteNpc_RUNE = 9999998; // Rune
private static final int VoteNpc_SCHUTTGART = 9999999; // Schuttgart

List<L2Npc> _npcs = new FastList<L2Npc>();

private static final String[] dlog =
{
"Vote for our server!"
};

public VoteNpc(int questId, String name, String descr)
{
super(questId, name, descr);

// Register Events
addEventId(VoteNpc_GLUDIO, Quest.QuestEventType.ON_SPAWN);
addEventId(VoteNpc_DION, Quest.QuestEventType.ON_SPAWN);
addEventId(VoteNpc_GIRAN, Quest.QuestEventType.ON_SPAWN);
addEventId(VoteNpc_OREN, Quest.QuestEventType.ON_SPAWN);
addEventId(VoteNpc_ADEN, Quest.QuestEventType.ON_SPAWN);
addEventId(VoteNpc_INNADRIL, Quest.QuestEventType.ON_SPAWN);
addEventId(VoteNpc_GODDARD, Quest.QuestEventType.ON_SPAWN);
addEventId(VoteNpc_RUNE, Quest.QuestEventType.ON_SPAWN);
addEventId(VoteNpc_SCHUTTGART, Quest.QuestEventType.ON_SPAWN);

scheduleBroadcast();
}

@Override
public String onSpawn(L2Npc npc)
{
if (!_npcs.contains(npc))
_npcs.add(npc);

return super.onSpawn(npc);
}

private void scheduleBroadcast()
{
Calendar cal = Calendar.getInstance();
int tfhTime = cal.get(Calendar.HOUR_OF_DAY);
long currTime = tfhTime*3600000 + cal.get(Calendar.MINUTE)*60000 +
cal.get(Calendar.SECOND)*1000 + cal.get(Calendar.MILLISECOND);

long nextTime = 0;
if ((tfhTime + 1) > 24) nextTime = 6900000;
else if (cal.get(Calendar.MINUTE) < 55) nextTime = tfhTime*3600000 + 3300000;
else nextTime = (tfhTime + 1)*3600000 + 3300000;
long initial = nextTime-currTime;
ThreadPoolManager.getInstance().
scheduleGeneralAtFixedRate(new BroadcastToZone(), initial, 3600000L);

}

public static void main(String[] args)

    {
new VoteNpc(-1,"VoteNpc","ai");

    }

class BroadcastToZone implements Runnable
{
@Override
public void run()
{
for (L2Npc npc : _npcs)
{
if (npc != null)
{
if (Config.DEBUG)
_log.info("Broadcasting VoteNpc Message to Zone");

int dg = Rnd.get(0, 2);

NpcSay ns = new NpcSay(npc.getObjectId(), Say2.SHOUT, npc.getNpcId(), dlog[dg]);

L2TownZone town = TownManager.getTown(npc.getX(), npc.getY(), npc.getZ());
{
if (town.getCharactersInside() != null && !town.getCharactersInside().isEmpty())

{
for (L2Character obj : town.getCharactersInside().values())
{
if (obj == null)
continue;
if (obj instanceof L2PcInstance)
obj.sendPacket(ns);
}
}
}
}
}
}
}
}


Jak zwykle poinformowany Maniaczek ;) To nie jest zrobione w javie jako AI lub Instancja, to jest jedynie walker routes czy jak tam to zwą.

Maniac

ta, i tego npcka napisal jakis nub na forach l2jfree
Lineage 2 Enigma is coming, most epic polish server ever!

Matim

Lol Maniac, nie mam do Ciebie słów powoli. Kopiować 1 htmla i kilka linijek sql, tak to daje mega satysfakcje, jeżeli coś jest podobne do czegoś innego to od razu jest skopiowane? (zwłaszcza takie gówno, które zrobić może każdy)


Maślan

Maniac to prostak i nuub - nie przejmuj sie nim, lubi sobie popeirdolic

Maniac

nub napisal program kiedy ty na gowno mowiles papu
Lineage 2 Enigma is coming, most epic polish server ever!

Maślan

Cytat: Maniac w Styczeń 24, 2010, 12:53:55 AM
nub napisal program kiedy ty na gowno mowiles papu

Zaczyna sie flame - lov it! ;p


Maniac

Lineage 2 Enigma is coming, most epic polish server ever!

Veandil

Maniac bez urazy ale żeś się przy* :oops: obudził z tym marudzeniem o "coded by matim"... ten npc tu od marca wisi a nagle Ci to teraz przeszkadza... równie dobrze możesz iść na plac zabaw i oskarżyć dzieci o plagiat bo bałwana zrobiły...
WWW.KOMPANIA-OW.XORG.PL
ASG to nie tylko zabawa- to sposób życia

Maślan

Cytat: Maniac w Styczeń 24, 2010, 01:09:32 AM
:*

^^

Cytat: Veandil w Styczeń 24, 2010, 01:32:48 AM
Maniac bez urazy ale żeś się przy* :oops: obudził z tym marudzeniem o "coded by matim"... ten npc tu od marca wisi a nagle Ci to teraz przeszkadza... równie dobrze możesz iść na plac zabaw i oskarżyć dzieci o plagiat bo bałwana zrobiły...

Ty to wszystko zepsujesz, a taka drame mialem

Veandil

tak tak maslan też Cie kocham (wkurzać) :P
WWW.KOMPANIA-OW.XORG.PL
ASG to nie tylko zabawa- to sposób życia