Autor |
Wiadomość |
Wedrowiec
Administrator
Dołączył: 21 Wrz 2008
Posty: 514 Przeczytał: 0 tematów
Pomógł: 5 razy Ostrzeżeń: 0/5
|
Wysłany:
Pią 11:26, 21 Lis 2008 |
|
tu będą umieszczane przydatne skrypty
na początek skrypt teleportacji czyli jeden z najużyteczniejszych skryptów. skrypt w czterech wersjach, dwie pierwsze aktywowane przez użycie obiektu (np skrypty wychodzenia z aren). Obiekt nie może być statyczny a skrypt umieszczony w miejscu OnUsed, dwa kolejne to skrypty to aktywowane podczas rozmowy (np Chauron, podróż statkiem w doku.) skypt umieszczamy w konwersacji w zakładce "Podjęte działania", ale proponuje umieszczenie skryptu w zdaniu kończącym dialog inaczej reszta dialogu zostanie przerwana podczas przenoszenia. w obu przypadkach istnieja dwie wersje skryptu z efektem teleportacji (biały krąg na ziemi tak jak na arenie, teleportacja trwa trochę dłużej) i bez tego efektu
skrypty teleportuja w miejsce oznaczone Punktem Nawigacyjnym o etykiecie "gdzie" (oczywiście sam punkt nawigacyjny powinien miec inna etykiete, unikalna i nie powtarzalna i taka sama etykieta powinna byc uzyta w skrypcie)
teleportacja OnUsed z efektem wizualnym
void main()
{
object oPC = GetLastUsedBy();
if (!GetIsPC(oPC)) return;
object oTarget;
location lTarget;
oTarget = GetWaypointByTag("gdzie");
lTarget = GetLocation(oTarget);
if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
AssignCommand(oPC, ClearAllActions());
DelayCommand(3.0, AssignCommand(oPC, ActionJumpToLocation(lTarget)));
oTarget = oPC;
int nInt;
nInt = GetObjectType(oTarget);
if (nInt != OBJECT_TYPE_WAYPOINT) ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_UNSUMMON), oTarget);
else ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_UNSUMMON), GetLocation(oTarget));
}
teleportacja OnUsed bez efektu wizualnego
void main()
{
object oPC = GetLastUsedBy();
if (!GetIsPC(oPC)) return;
object oTarget;
location lTarget;
oTarget = GetWaypointByTag("gdzie");
lTarget = GetLocation(oTarget);
if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
AssignCommand(oPC, ClearAllActions());
AssignCommand(oPC, ActionJumpToLocation(lTarget));
}
teleportacja podczas rozmowy z efektem wizualnym
void main()
{
object oPC = GetPCSpeaker();
object oTarget;
location lTarget;
oTarget = GetWaypointByTag("gdzie");
lTarget = GetLocation(oTarget);
if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
AssignCommand(oPC, ClearAllActions());
DelayCommand(3.0, AssignCommand(oPC, ActionJumpToLocation(lTarget)));
oTarget = oPC;
int nInt;
nInt = GetObjectType(oTarget);
if (nInt != OBJECT_TYPE_WAYPOINT) ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_UNSUMMON), oTarget);
else ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_IMP_UNSUMMON), GetLocation(oTarget));
}
teleportacja z rozmowy bez efektu wizualnego
void main()
{
object oPC = GetPCSpeaker();
object oTarget;
location lTarget;
oTarget = GetWaypointByTag("gdzie");
lTarget = GetLocation(oTarget);
if (GetAreaFromLocation(lTarget)==OBJECT_INVALID) return;
AssignCommand(oPC, ClearAllActions());
AssignCommand(oPC, ActionJumpToLocation(lTarget));
} |
Post został pochwalony 0 razy
|
|
|
|
|
|
damianwrobi
Dołączył: 29 Paź 2008
Posty: 45 Przeczytał: 0 tematów
Ostrzeżeń: 0/5
Skąd: Gliwice Płeć: Mężczyzna
|
Wysłany:
Sob 0:44, 22 Lis 2008 |
|
Mógłbyś napisać tu jaki jest skrypt żeby używając siedzeń można było na nich siadać i jaki jest skrypt na to żeby NPC siedzieli na tym siedzeniu. Wiem że w innym temacie było to napisane lecz jak sam zresztą napisałeś te skrypty działają tylko w matrycy, a ja bym chciał żeby działały też w moim module.
Potrzebowałbym też skryptu na to żeby latarnicy o konkretnych porach gasili i zapalali latarnie. (Potrzebuje tego wszystkiego bo robię drugie miasto do Matrycy i potrzebuje tych skryptów)
Ps. Czy w tym mieście muszę umieszczać NPC o nazwie Strażnik lub Strażniczka Matrycy, czy sam ich dodasz? |
Post został pochwalony 0 razy
|
|
|
|
Wedrowiec
Administrator
Dołączył: 21 Wrz 2008
Posty: 514 Przeczytał: 0 tematów
Pomógł: 5 razy Ostrzeżeń: 0/5
|
Wysłany:
Nie 16:13, 23 Lis 2008 |
|
void main()
{
AssignCommand(OBJECT_SELF,ActionSit(GetNearestObjectByTag("krzeslo", OBJECT_SELF)));
}
obiekt na którym ma usiąść NPC musi mieć etykietę "krzeslo"
jak pisałem w tym innym miejscu jesli lokacja ma byc dodana do matryca skrypt musi nosic nazwe siadanie_npc a taki skrypt najlepiej wsadzić w OnHeartbeat |
Post został pochwalony 0 razy
|
|
|
|
Wedrowiec
Administrator
Dołączył: 21 Wrz 2008
Posty: 514 Przeczytał: 0 tematów
Pomógł: 5 razy Ostrzeżeń: 0/5
|
Wysłany:
Pon 16:59, 24 Lis 2008 |
|
a oto jak zrobic by przedmiot miał swoją umiejętnośc, jest to trochę trudniejsze od zwykłęgo skryptu, bo pzredmioty nie mają miejsc na skrypty, ale jak się wie co trzeba zrobić wtedy to banał. najpierw twożymy przedmiot, wazna jest jego etykieta. potem twożymy dwa skrypty, pierwszy z nich nosi nazwe dokładnie taka samą jak etykieta przedmiotu a skrypt ten musi wyglądać tak:
#include "x2_inc_switches"
void main()
{
int nEvent =GetUserDefinedItemEventNumber();
switch (nEvent)
{
case X2_ITEM_EVENT_ACTIVATE:
ExecuteScript("ac_"+GetTag(GetItemActivated()),
OBJECT_SELF); break;
case X2_ITEM_EVENT_EQUIP:
ExecuteScript("eq_"+GetTag(GetPCItemLastEquipped()),
OBJECT_SELF); break;
case X2_ITEM_EVENT_UNEQUIP:
ExecuteScript("ue_"+GetTag(GetPCItemLastUnequipped())
, OBJECT_SELF); break;
case X2_ITEM_EVENT_ACQUIRE:
ExecuteScript("aq_"+GetTag(GetModuleItemAcquired()),
OBJECT_SELF); break;
case X2_ITEM_EVENT_UNACQUIRE:
ExecuteScript("ua_"+GetTag(GetModuleItemLost()),
OBJECT_SELF); break;
case X2_ITEM_EVENT_SPELLCAST_AT:
ExecuteScript("sp_"+GetTag(GetModuleItemLost()),
OBJECT_SELF); break;
case X2_ITEM_EVENT_ONHITCAST:
ExecuteScript("on_"+GetTag(GetSpellCastItem()),
OBJECT_SELF); break;
}
}
nastepnie twożymy skrypt z instrukcją co ma robić ten przedmiot a taki skrypt nazywamy "ac_ETYKIETA" oczywiscie zamiast slowa etykieta wpisujemy etykiete przedmiotu. Na koniec w właściwościach przedmiotu wybieramy "Rzucenie zaklęcia: Unikalna Moc" określamy ilość użyć i gotowe |
Post został pochwalony 0 razy
|
|
|
|
arystoteles
Dołączył: 31 Paź 2008
Posty: 29 Przeczytał: 0 tematów
Ostrzeżeń: 0/5
Płeć: Mężczyzna
|
Wysłany:
Śro 11:48, 26 Lis 2008 |
|
A mógłbym prosić o skrypt który powoduje że po otwarciu drzwi po jakimś czasie same się zamykają. |
Post został pochwalony 0 razy
|
|
|
|
Wedrowiec
Administrator
Dołączył: 21 Wrz 2008
Posty: 514 Przeczytał: 0 tematów
Pomógł: 5 razy Ostrzeżeń: 0/5
|
Wysłany:
Śro 12:00, 26 Lis 2008 |
|
ten skrypt wsadzamy w OnOpen
void main()
{
DelayCommand(8.0, ActionCloseDoor(OBJECT_SELF));
}
a ten w OnHeartbeat w drzwiach które się otwierają same, to znaczy na przykład jeśli są drzwi przejściowe z jednej do drugiej lokacji to otwierając jedne automatycznie otwiera się drugie, niestety te drugie sie nie zamkną mając tylko ten pierwszy skrypt dla tego trzeba użyć tego tutaj. mówiąc w skrócie ten skrypt dajemy do każdych drzwi przejściowych miedzy obszarami
void main()
{
object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, OBJECT_SELF, 1, CREATURE_TYPE_PERCEPTION, PERCEPTION_SEEN);
object lPC = GetLastOpenedBy();
if (IsInConversation(OBJECT_SELF) || GetIsInCombat()) return;
if (oPC == lPC)
{ }
else
{
ActionCloseDoor(OBJECT_SELF);
}
} |
Post został pochwalony 0 razy
|
|
|
|
Garrador
Dołączył: 17 Paź 2008
Posty: 213 Przeczytał: 0 tematów
Ostrzeżeń: 0/5
|
Wysłany:
Sob 14:40, 29 Lis 2008 |
|
Mam puyanko... jak zrobic, by potwór zostawiał po sobie dobrą broń co jakiś czas? ( np. jak pustynne minotaury, raz to, taz to itp. ) |
Post został pochwalony 0 razy
|
|
|
|
Wedrowiec
Administrator
Dołączył: 21 Wrz 2008
Posty: 514 Przeczytał: 0 tematów
Pomógł: 5 razy Ostrzeżeń: 0/5
|
Wysłany:
Śro 19:32, 03 Gru 2008 |
|
void main()
{
object oChair = OBJECT_SELF;
AssignCommand(GetLastUsedBy(), ActionSit(oChair));
}
skrypt dajemy do OnUse krzesła (musi być używalne) i po kliknięciu gracz będzie mógł usiąść. nazwa skryptu używana na matrycy "urzyciekrzesla" |
Post został pochwalony 0 razy
|
|
|
|
Wedrowiec
Administrator
Dołączył: 21 Wrz 2008
Posty: 514 Przeczytał: 0 tematów
Pomógł: 5 razy Ostrzeżeń: 0/5
|
Wysłany:
Śro 10:37, 10 Gru 2008 |
|
skrypt uruchamiajacy sklep podczas rozmowy
void main()
{
OpenStore(GetNearestObjectByTag("ETYKIETA"),GetPCSpeaker());
}
zamiast ETYKIETA, wpisujemy etykiete sklepu ktory umieszczamy obok sprzedawcy
nazwe skryptu dajemy skl_*** (oczywiscie cos orginalnego) |
Post został pochwalony 0 razy
Ostatnio zmieniony przez Wedrowiec dnia Śro 10:38, 10 Gru 2008, w całości zmieniany 1 raz
|
|
|
|
dkinvoker
Dołączył: 27 Paź 2008
Posty: 232 Przeczytał: 0 tematów
Pomógł: 1 raz Ostrzeżeń: 0/5
Skąd: Z świata Lineage ][ Płeć: Mężczyzna
|
Wysłany:
Sob 16:09, 10 Sty 2009 |
|
przykładowo mam se taki skrypt
//::///////////////////////////////////////////////
//:: FileName pd_10_bank
//:://////////////////////////////////////////////
//:://////////////////////////////////////////////
//:: Created By: Script Wizard
//:: Created On: 2009-01-10 13:59:11
//:://////////////////////////////////////////////
void main()
{
// Zabierz graczowi doświadczenie
GiveXPToCreature(GetPCSpeaker(), -1);
}
no to czemu nie dziła mi on w rozmowie? jak kiedyś robiłem rozmowe z takim skryptem to zawsze mi dzilalo a teraz nagle nie |
Post został pochwalony 0 razy
|
|
|
|
Wedrowiec
Administrator
Dołączył: 21 Wrz 2008
Posty: 514 Przeczytał: 0 tematów
Pomógł: 5 razy Ostrzeżeń: 0/5
|
Wysłany:
Sob 22:18, 10 Sty 2009 |
|
powinno działać. pamiętaj tylko że musi być jakiś exp do zabraniaa gdzie to wsadzasz w rozmowe? |
Post został pochwalony 0 razy
|
|
|
|
dkinvoker
Dołączył: 27 Paź 2008
Posty: 232 Przeczytał: 0 tematów
Pomógł: 1 raz Ostrzeżeń: 0/5
Skąd: Z świata Lineage ][ Płeć: Mężczyzna
|
Wysłany:
Nie 11:10, 11 Sty 2009 |
|
W banku na moim module (tam on dziala inaczej niż na matrycy) a jeśli chodzi czy to jest w wypowiedzi npc czy w mojej to dalem i w tej i w tej i nic... a mialem postac co 300 expa miala i nie stracila doświadczenia |
Post został pochwalony 0 razy
|
|
|
|
Wedrowiec
Administrator
Dołączył: 21 Wrz 2008
Posty: 514 Przeczytał: 0 tematów
Pomógł: 5 razy Ostrzeżeń: 0/5
|
Wysłany:
Nie 12:43, 11 Sty 2009 |
|
void RemoveXPFromParty(int nXP, object oPC, int bAllParty=TRUE)
{
if (!bAllParty)
{
nXP=(GetXP(oPC)-nXP)>=0 ? GetXP(oPC)-nXP : 0;
SetXP(oPC, nXP);
}
else
{
object oMember=GetFirstFactionMember(oPC, TRUE);
while (GetIsObjectValid(oMember))
{
nXP=(GetXP(oMember)-nXP)>=0 ? GetXP(oMember)-nXP : 0;
SetXP(oMember, nXP);
oMember=GetNextFactionMember(oPC, TRUE);
}
}
}
void main()
{
object oPC = GetPCSpeaker();
RemoveXPFromParty(100, oPC, FALSE);
} |
Post został pochwalony 0 razy
|
|
|
|
dkinvoker
Dołączył: 27 Paź 2008
Posty: 232 Przeczytał: 0 tematów
Pomógł: 1 raz Ostrzeżeń: 0/5
Skąd: Z świata Lineage ][ Płeć: Mężczyzna
|
Wysłany:
Nie 13:32, 11 Sty 2009 |
|
Jeśli to zamiennik tamtego skryptu to Dziękuję |
Post został pochwalony 0 razy
|
|
|
|
Ginden
Dołączył: 17 Gru 2008
Posty: 9 Przeczytał: 0 tematów
Ostrzeżeń: 0/5
Płeć: Mężczyzna
|
Wysłany:
Nie 13:59, 11 Sty 2009 |
|
dkinvoker napisał: |
void main()
{
// Zabierz graczowi doświadczenie
GiveXPToCreature(GetPCSpeaker(), -1);
} |
A ta funkcja obsługuje minusowe liczby? |
Post został pochwalony 0 razy
|
|
|
|
|