Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[TuT] Kolorowe Napisy nad NPC 7.6


Gość Maxikk

Rekomendowane odpowiedzi

Opublikowano

Witam w tym temacie pokaże wam jak zrobić kolorowe napisy nad npc w silniku 7.6 tak więc zaczynamy...

 

 

Edytujemy plik npc.cpp pod tą linijką:

 

lua_register(luaState, "selfGetPosition", NpcScript::luaSelfGetPos);

 

dodajemy ten kod:

 

   lua_register(luaState, "doNpcSendAnimatedText", NpcScript::luaSendAnimatedText);
   lua_register(luaState, "doNpcSendMagicEffect", NpcScript::luaSendMagicEffect);
   #endif

 

dalej w npc.cpp szukamy:

 

int NpcScript::luaActionMoveTo(lua_State* L){
   Position target;
   target.z=(int)lua_tonumber(L, -1);
   lua_pop(L,1);
   target.y=(int)lua_tonumber(L, -1);
   lua_pop(L,1);
   target.x=(int)lua_tonumber(L, -1);
   lua_pop(L,1);
   Npc* mynpc=getNpc(L);
   if(mynpc)
       mynpc->doMoveTo(target);
   return 0;
}

 

pod kotem który podałem wyżej dodajemy:

 

int NpcScript::luaSendAnimatedText(lua_State* L)
{
   std::string text = lua_tostring(L, -5);
   int color = (int)lua_tonumber(L, -4);
   int x = (int)lua_tonumber(L, -3);
   int y = (int)lua_tonumber(L, -2);
   int z = (int)lua_tonumber(L, -1);
   lua_pop(L, 5);
   Npc* mynpc = getNpc(L);

   Position pos(x,y,z);

   SpectatorVec list;
   mynpc->game->getSpectators(Range(pos, true), list);

   for(SpectatorVec::iterator it = list.begin(); it != list.end(); ++it){
         Player *p = dynamic_cast<Player*>(*it);
         if(p){
           p->sendAnimatedText(pos, color, text);
         }
   }

   return 0;
}

int NpcScript::luaSendMagicEffect(lua_State* L)
{
   int efekt = (int)lua_tonumber(L, -4);
   int x = (int)lua_tonumber(L, -3);
   int y = (int)lua_tonumber(L, -2);
   int z = (int)lua_tonumber(L, -1);
   lua_pop(L, 4);

   Position pos(x,y,z);

   for(AutoList<Player>::listiterator it = Player::listPlayer.list.begin(); it != Player::listPlayer.list.end(); ++it){
        (*it).second->sendMagicEffect(pos, efekt);
   }

   return 0;
}
#endif

 

zapisujemy i udajemy się do pliku npc.h i szukamy tej linijki:

 

static int luaSelfGetPos(lua_State *L);

 

pod nią wklejamy ten kod:

 

   static int luaSendAnimatedText(lua_State *L);
   static int luaSendMagicEffect(lua_State *L);
   #endif

 

zapisujemy i udajemy się do pliku game.h edytujemy go i szukamy tej linijki:

 

void getSpectators(const Range& range, SpectatorVec& list);

 

przenosimy linijkę podaną wyżej pod tą:

 

void checkSpell(Player* player, SpeakClasses type, std::string text);

 

Zapisujemy i edytujemy plik config.lua i dodajemy w nim ten tekst:

 

--czy efekty są włączone (yes/no)
effects_emblamed = "yes"
--czy kolor textu jest losowy(yes/no)
random_colour = "yes"
--czy efekt jest losowy(yes/no)
random_effect = "yes"
--co jaki czas sie wyświetla efekt w sekundach
co_ile = 1
-- {text="tekst", pos={x=pozycja_x, y=pozycja_y, z=pozycja_z}, color=kolor_textu, effect=nr_efektu}
efekty = {
               {text="Depo", pos={x=160, y=49, z=6}, color=1, effect=12},
               {text="Ammo", pos={x=155, y=49, z=6}, color=2, effect=13},
               {text="Aol", pos={x=165, y=49, z=6}, color=3, effect=14}
              }

 

Zapisujemy i udajemy się do folderu data/npc/scripts tworzymy w nim plik o nazwie efekt.lua i wklejamy do niego ten tekst:

 

start = nil
focus = 0
talk_start = 0
target = 0
following = false
attacking = false

dofile("./config.lua")

function onThingMove(creature, thing, oldpos, oldstackpos)
end

function onCreatureAppear(creature)
end

function onCreatureDisappear(cid, pos)
end

function onCreatureTurn(creature)
end

function msgcontains(txt, str)
end

function onCreatureSay(cid, type, msg)
end

function onCreatureChangeOutfit(creature)
end

function onThink()
if start == nil then
   start = os.time()
end
if(effects_emblamed == "yes")then
       if os.difftime (os.time(), start) >= (co_ile) then
           for i,v in pairs(efekty) do
               doNpcSendAnimatedText(v.text, (random_colour == "yes" and math.random(1, 254) or v.color),  v.pos.x, v.pos.y, v.pos.z)
               doNpcSendMagicEffect((random_effect == "yes" and math.random(0, 24) or v.effect),  v.pos.x, v.pos.y, v.pos.z)
           end
           start = os.time()
       end
   end
end

 

Zapisujemy i udajemy się do folderu /data/npc i tworzymy w nim plik o nazwie Efekty.xml i wklejamy do niego ten tekst:

 

<?xml version="1.0"?>
<npc name="Efekty" script="data/npc/scripts/efekt.lua" access="5">
   <look type="128" head="78" body="71" legs="82" feet="114"/>
</npc>

 

 

Zapisujemy odpalamy serwer stawiamy npc gdzieś na mapie i cieszymy się efektami :)

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...