PWE_PRC8/_module/nss/cc_event.nss
Jaysyn904 ee1dc35889 Initial Commit
Initial Commit
2025-04-03 10:29:41 -04:00

1565 lines
77 KiB
Plaintext
Raw Permalink Blame History

// Changing anything in here besides the code in InitConv &
// DoAction (plus its action subroutines) could well be very
// risky unless you really know what you are doing :)
#include "inc_isdm"
#include "prc_inc_spells"
int CUSTOM_TOKEN = 8000;
int MaxOpt = 23;
int pos;
string ConvName;
string FixName(string src)
{
string nam = src;
int cnt = 0;
int s;
for(s=0; s<GetStringLength(nam); s++) {
if (GetSubString(nam, s, 1) == "<") {
if (GetSubString(nam, s+1, 1) == "c") cnt++;
if (GetSubString(nam, s+1, 1) == "/") cnt--;
}
}
for(s=0; s<cnt; s++) nam += "</c>";
// SpeakString("fixed:" + nam + IntToString(cnt) + " name:" +src + " cnt:", TALKVOLUME_SHOUT);
return nam;
}
string ShowAttr(object oPC)
{
string str;
str = "Strength: " + IntToString(GetAbilityScore(oPC, ABILITY_STRENGTH)) + " (" + IntToString(GetAbilityModifier(ABILITY_STRENGTH, oPC)) + ") ";
str += "dexterity: " + IntToString(GetAbilityScore(oPC, ABILITY_DEXTERITY)) + " (" + IntToString(GetAbilityModifier(ABILITY_DEXTERITY, oPC)) + ") ";
str += "charisma: " + IntToString(GetAbilityScore(oPC, ABILITY_CHARISMA)) + " (" + IntToString(GetAbilityModifier(ABILITY_CHARISMA, oPC)) + ") ";
str += "intellegence: " + IntToString(GetAbilityScore(oPC, ABILITY_INTELLIGENCE)) + " (" + IntToString(GetAbilityModifier(ABILITY_INTELLIGENCE, oPC)) + ") ";
str += "wisdom: " + IntToString(GetAbilityScore(oPC, ABILITY_WISDOM)) + " (" + IntToString(GetAbilityModifier(ABILITY_WISDOM, oPC)) + ") ";
str += "constitution: " + IntToString(GetAbilityScore(oPC, ABILITY_CONSTITUTION)) + " (" + IntToString(GetAbilityModifier(ABILITY_CONSTITUTION, oPC)) + ") ";
str += "fortitude: " + IntToString(GetFortitudeSavingThrow(oPC)) + " ";
str += "will: " + IntToString(GetWillSavingThrow(oPC)) + " ";
str += "reflex: " + IntToString(GetReflexSavingThrow(oPC)) + " ";
str += "ac: " + IntToString(GetAC(oPC)) + " ";
str += "age: " + IntToString(GetAge(oPC)) + " ";
str += "diety: " + GetDeity(oPC) + " ";
str += "base attack: " + IntToString(GetBaseAttackBonus(oPC)) + " ";
str += "caster lv: " + IntToString(PRCGetCasterLevel(oPC)) + " ";
str += "challenge rating: " + FloatToString(GetChallengeRating(oPC), 5, 2) + " ";
str += "hp: " + IntToString(GetCurrentHitPoints(oPC)) + " (" + IntToString(GetMaxHitPoints(oPC)) + ") ";
str += "speed: " + IntToString(GetMovementRate(oPC)) + " ";
if (isdm(OBJECT_SELF)==TRUE) {
str += "immortal: " + IntToString(GetImmortal(oPC)) + " ";
str += "IP: " + GetPCIPAddress(oPC) + " ";
str += "cdkey: " + GetPCPublicCDKey(oPC) + " ";
}
return str;
}
void CreateChoice(object oPC, string msg, string act)
{
int lev = GetLocalInt(oPC, "cc_level");
SetLocalString(oPC, "cc_msg" + IntToString(pos), msg);
SetLocalString(oPC, "cc_act" + IntToString(pos), act);
if (pos == 0) {
SetLocalInt(oPC, "cc_level", lev+1);
SetLocalString(oPC, "cc_prev" + IntToString(lev), ConvName);
if (lev != 0) {
SetLocalString(oPC, "cc_msg" + IntToString(pos+1), "<< Previous");
SetLocalString(oPC, "cc_act" + IntToString(pos+1), "<<");
if (pos < MaxOpt) pos += 1;
}
}
if (pos < MaxOpt) pos += 1;
}
void MakeLvUp(int l, object oPC)
{
string xp;
int s;
for(s=l; s<l+20; s++) {
xp = Get2DAString("exptable", "XP", s);
CreateChoice(oPC, "Raise or lower level to " + IntToString(s+1), "xp_" + xp);
}
}
string Align(object oPC)
{
string str = "";
switch (GetAlignmentLawChaos(oPC)) {
case ALIGNMENT_LAWFUL: str = "Lawful "; break;
case ALIGNMENT_NEUTRAL: str = "Neutral "; break;
case ALIGNMENT_CHAOTIC: str = "Chaotic "; break;
}
switch (GetAlignmentGoodEvil(oPC)) {
case ALIGNMENT_GOOD: str += "Good"; break;
case ALIGNMENT_NEUTRAL: str += "Neutral"; break;
case ALIGNMENT_EVIL: str += "Evil"; break;
}
if (str == "Neutral Neutral") str = "True Neutral";
str += "(" + IntToString(GetLawChaosValue(oPC)) + "/" + IntToString(GetGoodEvilValue(oPC)) + ")";
str += "\n" + ShowAttr(oPC);
return str;
}
void MakePoly(int p, object oPC)
{
string nam;
int s;
for(s=p; s<p+15; s++) {
nam = Get2DAString("polymorph", "Name", s);
if (nam != "") {
if (GetStringLeft(nam, 15) == "POLYMORPH_TYPE_") nam = GetSubString(nam, 15, 40);
if (GetStringLeft(nam, 10) == "POLYMORPH_") nam = GetSubString(nam, 10, 40);
nam = GetStringLeft(nam, 1) + GetStringLowerCase(GetSubString(nam, 1, 40));
CreateChoice(oPC, nam, "p_" + IntToString(s));
}
}
}
void ZapToys(object PC, object Target, int perm)
{
int s, tcnt = GetLocalInt(GetModule(), "tcnt");
object item;
string ref;
string amsg = "";
if (perm != 0) amsg = " & deactivated forever";
for(s=0; s<tcnt; s++) {
ref = GetLocalString(GetModule(), "tref"+IntToString(s));
item = GetItemPossessedBy(Target, "toy_"+ref);
//SpeakString(GetName(Target) + ": "+ ref + " = " + GetName(item), TALKVOLUME_SHOUT);
if (item != OBJECT_INVALID) {
SendMessageToPC(PC, GetName(item) + " removed" + amsg + " for " + GetName(Target));
DestroyObject(item, 1.0);
}
}
if (perm != 0) {
SetLocalInt(Target, "toys", 0);
SetCampaignInt(GetModuleName(), "toys", GetLocalInt(Target, "toys"), Target);
}
}
void ShowToy(object PC, object Target, int toys, int t)
{
string name = GetLocalString(GetModule(), "tname"+IntToString(t));
string ref = GetLocalString(GetModule(), "tref"+IntToString(t));
string colour = "<c<> >"; // red
if (GetItemPossessedBy(Target, "toy_"+ref) != OBJECT_INVALID) {
if ((toys & (1<<t)) != 0 || isdm(Target) == TRUE) {
colour = "<cf<63> >"; // green
} else {
colour = "<c<><63> >"; // yellow
}
}
CreateChoice(PC, colour + name + "</c>", "toy_" + IntToString(t));
}
void ShowAllow(object oPC, string typ)
{
int s, e = 0, n;
string who, allow = GetCampaignString(GetModuleName(), "allow"+GetPCPlayerName(oPC));
for(n=0; n<10; n++) {
s = e+1;
e = FindSubString(allow, "~" + IntToString(n+1));
who = GetSubString(allow, s + 1, e - s - 1);
if (who != "~") CreateChoice(oPC, who, typ + who);
}
}
void InitConv(object oPC, string conv) // fill in then start the selcted custom conversation
{
int n;
pos = 0;
ConvName = conv;
for(n=0; n<=MaxOpt; n++) { // Clear old conversation
SetLocalString(oPC, "cc_msg" + IntToString(n), "");
}
if (conv == "summon") {
SetLocalInt(oPC, "cc_level", 0);
CreateChoice(oPC, "Choose monster type:", "");
CreateChoice(oPC, "Quest monsters", "cc_quest"); // delete line - demo only
// copy & paste the following line to add a new monster category
CreateChoice(oPC, "", "cc_");
} else if (conv == "quest") { // delete line - demo only
CreateChoice(oPC, "Choose Monster:", ""); // delete line - demo only
CreateChoice(oPC, "Soul Taker", "s_soultaker"); // delete line - demo only
CreateChoice(oPC, "Black Dragon", "s_blackdragon"); // delete line - demo only
// copy the following 3 lines and paste them here to create a new category menu
} else if (conv == "") {
CreateChoice(oPC, "Choose Monster:", "");
CreateChoice(oPC, "", "s_");
} else if (conv == "qty") {
object cc_conv=GetLocalObject(oPC, "cc_conv");
int sum_cnt=0;
int s;
object monster;
for(s=1; s<10; s++) {
monster = GetNearestObjectByTag("s_"+GetTag(cc_conv), cc_conv, s);
if (monster != OBJECT_INVALID) sum_cnt++;
}
if(sum_cnt<5){
CreateChoice(oPC, "How many", "");
CreateChoice(oPC, "One", "q_1");
CreateChoice(oPC, "Two", "q_2");
CreateChoice(oPC, "Three", "q_3");
CreateChoice(oPC, "Four", "q_4");
CreateChoice(oPC, "Five", "q_5");
} else {
AssignCommand(cc_conv, SpeakString("I will not summon any more monsters until current ones have been killed"));
}
} else if (conv == "lvup") {
object oTarget = GetLocalObject(oPC, "target");
CreateChoice(oPC, FixName(GetName(oTarget)) + ": " + ShowAttr(oTarget) + "\n", "");
CreateChoice(oPC, "Change Aligment", "cc_align");
if (Get2DAString("exptable", "XP", 21) != "") {
CreateChoice(oPC, "Levels 21 to 40", "cc_lvup2");
}
MakeLvUp(0, oPC);
} else if (conv == "lvup2") {
object oTarget = GetLocalObject(oPC, "target");
CreateChoice(oPC, FixName(GetName(oTarget)) + ": " + ShowAttr(oTarget) + "\n", "");
MakeLvUp(20, oPC);
} else if (conv == "align") {
object oTarget = GetLocalObject(oPC, "target");
CreateChoice(oPC, "Shift Alignment:\n" + FixName(GetName(oTarget)) + ": " + Align(oTarget) + "\n", "");
CreateChoice(oPC, "Chaotic 5", "al_c5");
CreateChoice(oPC, "Chaotic 10", "al_c10");
CreateChoice(oPC, "Chaotic 20", "al_c20");
CreateChoice(oPC, "Lawful 5", "al_l5");
CreateChoice(oPC, "Lawful 10", "al_l10");
CreateChoice(oPC, "Lawful 20", "al_l20");
CreateChoice(oPC, "Good 5", "al_g5");
CreateChoice(oPC, "Good 10", "al_g10");
CreateChoice(oPC, "Good 20", "al_g20");
CreateChoice(oPC, "Evil 5", "al_e5");
CreateChoice(oPC, "Evil 10", "al_e10");
CreateChoice(oPC, "Evil 20", "al_e20");
} else if (conv == "poly") {
// SetLocalInt(oPC, "cc_level", 0); // now done in cc_poly to allow emote wand to work
CreateChoice(oPC, "Select form:", "");
MakePoly(0, oPC);
if (Get2DAString("polymorph", "Name", 15) != "") {
CreateChoice(oPC, "Some more", "cc_poly2");
}
if (Get2DAString("polymorph", "Name", 30) != "") {
CreateChoice(oPC, "Still more", "cc_poly3");
}
if (Get2DAString("polymorph", "Name", 45) != "") {
CreateChoice(oPC, "Yet more", "cc_poly4");
}
} else if (conv == "poly2") {
CreateChoice(oPC, "Select form:", "");
MakePoly(15, oPC);
} else if (conv == "poly3") {
CreateChoice(oPC, "Select form:", "");
MakePoly(30, oPC);
} else if (conv == "poly4") {
CreateChoice(oPC, "Select form:", "");
MakePoly(45, oPC);
} else if (conv == "emote") {
SetLocalInt(oPC, "cc_level", 0);
CreateChoice(oPC, "What would you like to do?", "");
CreateChoice(oPC, "Freeze/Unfreeze", "ew_freeze");
CreateChoice(oPC, "Sit on the Floor", "ew_sit");
CreateChoice(oPC, "Sit in the nearest Chair", "ew_chair");
// CreateChoice(oPC, "Sleep", "ew_sleep");
CreateChoice(oPC, "Worship", "ew_worship");
CreateChoice(oPC, "Meditate/Pray", "ew_pray");
CreateChoice(oPC, "Read", "ew_read");
CreateChoice(oPC, "Dance", "cc_dance");
// CreateChoice(oPC, "Drunk", "ew_drunk");
// CreateChoice(oPC, "Dead", "ew_dead");
CreateChoice(oPC, "Change Appearance", "cc_ap0");
// CreateChoice(oPC, "Polymorph", "cc_poly");
CreateChoice(oPC, "Sound effect", "cc_snd");
CreateChoice(oPC, "I'd like to do a dice roll", "cc_roll");
// CreateChoice(oPC, "DAMMIT", "ew_dam");
CreateChoice(oPC, "Flipper", "ew_flip");
CreateChoice(oPC, "Fish Flop", "ew_fish");
CreateChoice(oPC, "WoW", "ew_wow");
CreateChoice(oPC, "Fly", "cc_fly");
CreateChoice(oPC, "Have a Smoke", "ew_smoke");
CreateChoice(oPC, "Lie Down-Back", "ew_back");
CreateChoice(oPC, "Lie Down-Front", "ew_front");
CreateChoice(oPC, "Speak", "cc_speak");
// CreateChoice(oPC, "Get Drunk", "cc_getdrunk");
} else if (conv == "fly") {
CreateChoice(oPC, "Choose", "");
CreateChoice(oPC, "Freeze/Unfreeze", "ew_freeze");
CreateChoice(oPC, "Fly", "ew_fly1");
CreateChoice(oPC, "Fly 2", "ew_fly2");
CreateChoice(oPC, "Super fly", "ew_fly3");
CreateChoice(oPC, "Super fly 2", "ew_fly4");
} else if (conv == "dance") {
CreateChoice(oPC, "Choose dance", "");
CreateChoice(oPC, "Freeze/Unfreeze", "ew_freeze");
CreateChoice(oPC, "Dance 1", "ew_dance");
CreateChoice(oPC, "Dance 2", "ew_dance2");
CreateChoice(oPC, "Dance 3", "ew_dance3");
CreateChoice(oPC, "Dance 4", "ew_dance4");
CreateChoice(oPC, "Striptease", "ew_strip");
CreateChoice(oPC, "Striptease2", "ew_strip2");
} else if (conv == "speak") {
CreateChoice(oPC, "Say what?", "");
CreateChoice(oPC, "Greet", "sp_" + IntToString(VOICE_CHAT_HELLO));
CreateChoice(oPC, "GoodBye", "sp_" + IntToString(VOICE_CHAT_GOODBYE));
CreateChoice(oPC, "Cuss", "sp_" + IntToString(VOICE_CHAT_CUSS));
CreateChoice(oPC, "Laugh", "sp_" + IntToString(VOICE_CHAT_LAUGH));
CreateChoice(oPC, "Cheer", "sp_" + IntToString(VOICE_CHAT_CHEER));
CreateChoice(oPC, "Bored", "sp_" + IntToString(VOICE_CHAT_BORED));
CreateChoice(oPC, "Search", "sp_" + IntToString(VOICE_CHAT_SEARCH));
CreateChoice(oPC, "Thanks", "sp_" + IntToString(VOICE_CHAT_THANKS));
CreateChoice(oPC, "Good idea", "sp_" + IntToString(VOICE_CHAT_GOODIDEA));
CreateChoice(oPC, "Bad idea", "sp_" + IntToString(VOICE_CHAT_BADIDEA));
CreateChoice(oPC, "Threaten", "sp_" + IntToString(VOICE_CHAT_THREATEN));
CreateChoice(oPC, "Poisoned", "sp_" + IntToString(VOICE_CHAT_POISONED));
CreateChoice(oPC, "Need Rest", "sp_" + IntToString(VOICE_CHAT_REST));
CreateChoice(oPC, "Enemies", "sp_" + IntToString(VOICE_CHAT_ENEMIES));
CreateChoice(oPC, "Look Here", "sp_" + IntToString(VOICE_CHAT_LOOKHERE));
CreateChoice(oPC, "Move Over", "sp_" + IntToString(VOICE_CHAT_MOVEOVER));
CreateChoice(oPC, "Flatuence", "ew_fart");
} else if (conv == "getdrunk") {
CreateChoice(oPC, "How drunk?", "");
CreateChoice(oPC, "Take a swig", "gd_ew_drunk_swig");
CreateChoice(oPC, "Drink", "gd_ew_drink");
CreateChoice(oPC, "Burp", "gd_ew_drunk_burp");
CreateChoice(oPC, "Wobbly", "gd_ew_drunk");
CreateChoice(oPC, "Falling Down", "gd_ew_drunkfall");
CreateChoice(oPC, "Pass Out", "gd_ew_drunkpassout");
} else if (conv == "roll") {
CreateChoice(oPC, "What do you want to roll?", "");
CreateChoice(oPC, "an Ability Check", "cc_ability");
CreateChoice(oPC, "a Skill Check", "cc_skill");
CreateChoice(oPC, "Just roll a dice", "cc_dice");
} else if (conv == "ability") {
CreateChoice(oPC, "Which Ability?", "");
CreateChoice(oPC, "Strength", "ew_str");
CreateChoice(oPC, "Dexterity (Reflex Saves)", "ew_dex");
CreateChoice(oPC, "Constitution (Fort Saves)", "ew_con");
CreateChoice(oPC, "Intelligence", "ew_int");
CreateChoice(oPC, "Wisdom (Will Saves)", "ew_wis");
CreateChoice(oPC, "Charisma", "ew_char");
} else if (conv == "skill") {
CreateChoice(oPC, "Which Skill?", "");
CreateChoice(oPC, "Concentration", "ew_conc");
CreateChoice(oPC, "Disable Trap", "ew_trap");
CreateChoice(oPC, "Discipline", "ew_disc");
CreateChoice(oPC, "Hide", "ew_hide");
CreateChoice(oPC, "Listen", "ew_listen");
CreateChoice(oPC, "Lore", "ew_lore");
CreateChoice(oPC, "Open Lock", "ew_open");
CreateChoice(oPC, "Perform", "ew_perf");
CreateChoice(oPC, "Persuade", "ew_pers");
CreateChoice(oPC, "Search", "ew_search");
CreateChoice(oPC, "Spellcraft", "ew_spell");
CreateChoice(oPC, "Spot", "ew_spot");
CreateChoice(oPC, "Taunt", "ew_taunt");
} else if (conv == "dice") {
CreateChoice(oPC, "Ok, which dice?", "");
CreateChoice(oPC, "d4", "ew_d4");
CreateChoice(oPC, "d6", "ew_d6");
CreateChoice(oPC, "d8", "ew_d8");
CreateChoice(oPC, "d10", "ew_d10");
CreateChoice(oPC, "d12", "ew_d12");
CreateChoice(oPC, "d20", "ew_d20");
CreateChoice(oPC, "d100", "ew_d100");
} else if (conv == "snd") {
CreateChoice(oPC, "Which sound would you like?", "");
CreateChoice(oPC, "Animal Sounds", "cc_s_animal");
CreateChoice(oPC, "People Sounds", "cc_s_people");
CreateChoice(oPC, "Spooky Sounds", "cc_s_spook");
CreateChoice(oPC, "Environment Sounds", "cc_s_env");
} else if (conv == "s_animal") {
CreateChoice(oPC, "Which Animal Sound?", "");
CreateChoice(oPC, "Big Cat", "ews_cat");
CreateChoice(oPC, "Cat Screech", "as_an_catscrech2");
CreateChoice(oPC, "Wolves howling", "ews_wolf");
CreateChoice(oPC, "Cow Mooing", "ews_cow");
CreateChoice(oPC, "Crow Cawing", "ews_crow");
CreateChoice(oPC, "Dog Barking", "as_an_dogbark6");
CreateChoice(oPC, "Hawk", "as_an_hawk1");
CreateChoice(oPC, "Owl Hooting", "ews_owl");
CreateChoice(oPC, "Rooster Crowing", "as_an_rooster1");
} else if (conv == "s_people") {
CreateChoice(oPC, "Which People Sound?", "");
CreateChoice(oPC, "2 Men Chatting", "as_pl_nobtalk1");
CreateChoice(oPC, "Man Coughs", "ews_mcough");
CreateChoice(oPC, "Man Crying", "ews_mcry");
CreateChoice(oPC, "Man Dies", "ews_mdie");
CreateChoice(oPC, "Man Sneezes", "as_pl_sneezingm1");
CreateChoice(oPC, "Man Spits", "as_pl_spittingm2");
CreateChoice(oPC, "Man Yawns", "as_pl_yawningm1");
CreateChoice(oPC, "Woman screams", "ews_wscream");
CreateChoice(oPC, "Woman Coughs", "ews_wcough");
CreateChoice(oPC, "Woman Crying", "ews_wcry");
CreateChoice(oPC, "Woman Says 'Hands off Pig!'", "as_pl_tavlewdf2");
CreateChoice(oPC, "More", "cc_s_people2");
} else if (conv == "s_people2") {
CreateChoice(oPC, "Which People Sound?", "");
CreateChoice(oPC, "Rough Man says 'I need more Ale'", "as_pl_tavcallm2");
CreateChoice(oPC, "Dunk man sings about an Ogre", "as_pl_tavsongm1");
CreateChoice(oPC, "Drunk Singing", "as_pl_tavsongm2");
CreateChoice(oPC, "Officer shouts 'To your Posts!'", "as_pl_officerm4");
CreateChoice(oPC, "Male Pleading 'Let me out Please'", "as_pl_despairm1");
CreateChoice(oPC, "We're doomed", "as_pl_evanglstm3");
} else if (conv == "s_spook") {
CreateChoice(oPC, "Which Spooky Sound?", "");
CreateChoice(oPC, "Deep Growling", "ews_growl");
CreateChoice(oPC, "Evil Men Chanting", "as_pl_evilchantm");
CreateChoice(oPC, "Spooky Laughing", "ews_slaugh");
CreateChoice(oPC, "Spooky Moaning", "ews_smoan");
CreateChoice(oPC, "Demon Voice 'I will rape your soul'", "c_demon_bat1");
CreateChoice(oPC, "Demon Voice 'Your pain shall be eternal'", "c_demon_bat2");
CreateChoice(oPC, "Ghoul Voice 'Rend your flesh'", "c_ghoul_bat2");
} else if (conv == "s_env") {
CreateChoice(oPC, "Which Environment Sound?", "");
CreateChoice(oPC, "Breaking Noises", "ews_break");
CreateChoice(oPC, "Bush Rustles", "as_na_bushmove1");
CreateChoice(oPC, "Door Shuts", "ews_door");
CreateChoice(oPC, "Floorboard Creaks", "ews_creak");
CreateChoice(oPC, "Small Splash", "as_na_splash1");
CreateChoice(oPC, "Thunder", "ews_thunder");
CreateChoice(oPC, "Twig Snaps", "ews_twig");
} else if (conv == "score") {
SetLocalInt(oPC, "cc_level", 0);
CreateChoice(oPC, "Scoreboard", "");
CreateChoice(oPC, "Show all players scores", "sb_scores");
CreateChoice(oPC, "Tell everyone my stats", "sb_stats");
CreateChoice(oPC, "Show which toys work for me here", "sb_toys");
CreateChoice(oPC, "Give me the Emote Wand", "sb_emote");
CreateChoice(oPC, "Give me a Mat", "sb_mat");
CreateChoice(oPC, "Jump to party leader", "sb_leader");
CreateChoice(oPC, "Jump to " + GetName(GetArea(GetWaypointByTag("WP_Main"))), "sb_main");
} else if (conv == "ajump") {
CreateChoice(oPC, "Where to ?", "");
int cnt = 0;
object loc = GetObjectByTag("jump", cnt);
while(GetIsObjectValid(loc) == TRUE && cnt<15) {
CreateChoice(oPC, GetName(GetArea(loc)), "aj_" + IntToString(cnt));
cnt++;
loc = GetObjectByTag("jump", cnt);
}
if (GetObjectByTag("jump", 15) != OBJECT_INVALID) CreateChoice(oPC, "More", "cc_ajump2");
if (GetObjectByTag("jump", 30) != OBJECT_INVALID) CreateChoice(oPC, "Still More", "cc_ajump3");
} else if (conv == "ajump2") {
CreateChoice(oPC, "Where to ?", "");
int cnt = 0;
object loc = GetObjectByTag("jump", cnt+15);
while(GetIsObjectValid(loc) == TRUE && cnt<15) {
CreateChoice(oPC, GetName(GetArea(loc)), "aj_" + IntToString(cnt+15));
cnt++;
loc = GetObjectByTag("jump", cnt+15);
}
} else if (conv == "ajump3") {
CreateChoice(oPC, "Where to ?", "");
int cnt = 0;
object loc = GetObjectByTag("jump", cnt+30);
while(GetIsObjectValid(loc) == TRUE && cnt<15) {
CreateChoice(oPC, GetName(GetArea(loc)), "aj_" + IntToString(cnt+30));
cnt++;
loc = GetObjectByTag("jump", cnt+30);
}
} else if (conv == "pjump") {
//SetLocalInt(oPC, "cc_level", 0);
CreateChoice(oPC, "Jump to:", "");
object oPlay = GetFirstPC();
while(GetIsObjectValid(oPlay) == TRUE) {
if (GetTag(GetArea(oPlay)) != "WaitingRoom") {
CreateChoice(oPC, FixName(GetName(oPlay))+" ("+GetName(GetArea(oPlay))+")", "pj_" + GetName(oPlay));
}
oPlay = GetNextPC();
}
} else if (conv == "GetPlayer") {
//SetLocalInt(oPC, "cc_level", 0);
SetLocalString(OBJECT_SELF, "action", GetLocalString(OBJECT_SELF, "tool"));
CreateChoice(oPC, "Select Player:", "");
object oPlay = GetFirstPC();
while(GetIsObjectValid(oPlay) == TRUE) {
CreateChoice(oPC, FixName(GetName(oPlay))+" ("+GetName(GetArea(oPlay))+")", "sel_" + GetName(oPlay));
oPlay = GetNextPC();
}
} else if (GetStringLeft(conv, 2) == "sp") {
int p = StringToInt(GetSubString(conv, 2, 3));
int e = p + 10;
CreateChoice(oPC, "Select spell to cast or speak a number between 1 and 802:", "");
SetLocalInt(oPC, "spell", p);
if (p > 0) {
if (p<10) {
CreateChoice(oPC, "Back 10 spells", "cc_sp0");
} else {
CreateChoice(oPC, "Back 10 spells", "cc_sp"+IntToString(p-10));
}
}
object oTarget = GetLocalObject(oPC, "target");
// if (GetName(oTarget) == GetName(oPC)) {
if (GetLocalObject(oPC, "old") != OBJECT_INVALID) {
CreateChoice(oPC, "You cast at me", "you");
} else {
CreateChoice(oPC, "I'll cast on myself", "me");
}
CreateChoice(oPC, "Dispel", "dis");
while(p<e) {
// CreateChoice(oPC, Get2DAString("iprp_spells", "Label", p) + " level : " + Get2DAString("iprp_spells", "CasterLvl", p) + " (" + IntToString(p) + ")", "cs_" + Get2DAString("iprp_spells", "SpellIndex", p));
CreateChoice(oPC, Get2DAString("spells", "Label", p) + " (" + IntToString(p) + ")", "cs_" + IntToString(p));
p++;
}
CreateChoice(oPC, "Next 10 spells", "cc_sp"+IntToString(e));
} else if (GetStringLeft(conv, 2) == "ap") {
int p = StringToInt(GetSubString(conv, 2, 5));
int e = p + 10;
if (GetLocalInt(oPC, "old_ap") == 0) SetLocalInt(oPC, "old_ap", GetAppearanceType(oPC));
// CreateChoice(oPC, "Select appearance or speak a number between 1 and 802, saving your character will make appearance change permanent:", "");
CreateChoice(oPC, "Select appearance (saving your character will make appearance change permanent):", "");
if (p > 0) {
if (p<10) {
CreateChoice(oPC, "Back 10", "cc_ap0");
} else {
CreateChoice(oPC, "Back 10", "cc_ap"+IntToString(p-10));
}
if (p<50) {
CreateChoice(oPC, "Back 50", "cc_ap0");
} else {
CreateChoice(oPC, "Back 50", "cc_ap"+IntToString(p-50));
}
}
CreateChoice(oPC, "Go back to your normal appearance", "ca_orig");
if (GetLocalInt(GetModule(), "CEP") == 1) {
if (p > 500) {
CreateChoice(oPC, "Standard Appearances", "cc_ap0");
} else {
CreateChoice(oPC, "CEP Appearances", "cc_ap1000");
}
}
CreateChoice(oPC, "Favourite Appearances", "cc_favapp");
string aname;
while(p<e) {
aname = Get2DAString("appearance", "LABEL", p);
if (aname != "") {
CreateChoice(oPC, aname + " (" + IntToString(p) + ")", "ca_" + IntToString(p));
} else {
CreateChoice(oPC, "invalid" + " (" + IntToString(p) + ")", "ca_8");
}
p++;
}
CreateChoice(oPC, "Next 10", "cc_ap"+IntToString(e));
CreateChoice(oPC, "Forward 50", "cc_ap"+IntToString(e+40));
CreateChoice(oPC, "Forward 100", "cc_ap"+IntToString(e+90));
} else if (conv == "favapp") {
CreateChoice(oPC, "Select:", "");
int s, app;
string aname;
for(s=1; s<10; s++) {
app = GetCampaignInt(GetModuleName(), "app" + IntToString(s), oPC) - 1;
aname = "Slot " + IntToString(s) + ": ";
if (app != -1) {
aname += Get2DAString("appearance", "LABEL", app);
} else {
aname += "(not used)";
}
CreateChoice(oPC, aname + " (" + IntToString(app) + ")", "fa_" + IntToString(app));
}
CreateChoice(oPC, "Add current appearance to Favourites", "cc_favappadd");
} else if (conv == "favappadd") {
CreateChoice(oPC, "There are 9 slots where you can save your favourite appearances.\n\nSelect:", "");
int s;
for(s=1; s<10; s++) {
CreateChoice(oPC, "Slot " + IntToString(s), "afa_" + IntToString(s));
}
} else if (conv == "recall") {
CreateChoice(oPC, "Select:", "");
CreateChoice(oPC, "Jump to " + GetName(GetArea(GetWaypointByTag("WP_Main"))), "sb_main");
string loc1 = GetName(GetAreaFromLocation(GetLocalLocation(oPC, "loc1")));
string loc2 = GetName(GetAreaFromLocation(GetLocalLocation(oPC, "loc2")));
string loc3 = GetName(GetAreaFromLocation(GetLocalLocation(oPC, "loc3")));
if (loc1 != "") CreateChoice(oPC, "Jump to " + loc1 + " (slot 1)", "rec_1");
if (loc2 != "") CreateChoice(oPC, "Jump to " + loc2 + " (slot 2)", "rec_2");
if (loc3 != "") CreateChoice(oPC, "Jump to " + loc3 + " (slot 3)", "rec_3");
CreateChoice(oPC, "Save this location in slot 1", "sav_1");
CreateChoice(oPC, "Save this location in slot 2", "sav_2");
CreateChoice(oPC, "Save this location in slot 3", "sav_3");
} else if (GetStringLeft(conv, 2) == "tm") {
//SpeakString(GetName(oPC) + " -> " + GetName(GetLocalObject(oPC, "target")), TALKVOLUME_SHOUT);
int t = StringToInt(GetSubString(conv, 2, 3));
object Target = GetLocalObject(oPC, "target");
CreateChoice(oPC, "Select:", "");
CreateChoice(oPC, "Activate toys", "toy_activate");
CreateChoice(oPC, "Remove toys till player reloads", "toy_deactivate");
CreateChoice(oPC, "Remove toys forever", "toy_zap");
int toys = GetLocalInt(Target, "toys");
int tcnt = GetLocalInt(GetModule(), "tcnt");
int end = t+15;
if (tcnt < end) end = tcnt;
while(t<end) {
ShowToy(oPC, Target, toys, t);
t++;
}
if (t<tcnt) CreateChoice(oPC, "more toys", "cc_tm" + IntToString(t));
} else if (conv == "dye") {
CreateChoice(oPC, "Action:", "");
CreateChoice(oPC, "Open the cloth dye shop.", "dye_clothdye_merch");
CreateChoice(oPC, "Open the leather dye shop.", "dye_leatherdye_merch");
CreateChoice(oPC, "Open the metal dye shop.", "dye_metaldye_merch");
CreateChoice(oPC, "Give me the dye color code book.", "dye_book");
CreateChoice(oPC, "Give me a copy of my Armor.", "dye_carm");
CreateChoice(oPC, "Give me a copy of my Helm.", "dye_chelm");
CreateChoice(oPC, "Dye my Armor.", "dye_arm");
CreateChoice(oPC, "Dye my Helm.", "dye_helm");
} else if (conv == "msg") {
string msg = "Message board:";
DeleteLocalInt(oPC, "privshow");
int sel = GetLocalInt(oPC, "sel");
if (sel != 0) {
msg += "\n\n" + GetCampaignString(GetModuleName(), "from" + IntToString(sel)) + "\n";
msg += GetCampaignString(GetModuleName(), "msg" + IntToString(sel));
}
CreateChoice(oPC, msg, "");
int m = GetLocalInt(oPC, "showmsg");
int s = m - 9;
if (s < 1) s = 1;
while(s<=m) {
msg = IntToString(s);
CreateChoice(oPC, GetCampaignString(GetModuleName(), "from" + msg), "msg_" + msg);
s++;
}
CreateChoice(oPC, "Leave a message.", "msg_new");
if (sel != 0 && GetItemPossessedBy(oPC, "toy_maker") != OBJECT_INVALID) {
CreateChoice(oPC, "Delete current message.", "msg_del");
}
if (m > 10) CreateChoice(oPC, "Go back 10 messages.", "msg_back");
CreateChoice(oPC, "Private Messages.", "cc_priv");
} else if (conv == "post") {
string cmd = "msg_post";
if (GetLocalString(oPC, "to") != "") cmd = "priv_ppost";
CreateChoice(oPC, GetLocalString(oPC, "title") + "\n" + GetLocalString(oPC, "msg") + "\n\nPost this message ?", "");
CreateChoice(oPC, "Yes.", cmd);
CreateChoice(oPC, "No.", "cc_msg" + IntToString(GetLocalInt(GetModule(), "msgcnt")));
} else if (conv == "priv") {
string msg = "Private Message board:";
int sel = GetLocalInt(oPC, "privsel");
if (sel != 0) {
msg += "\n\n" + GetCampaignString(GetModuleName(), "from" + GetPCPlayerName(oPC) + IntToString(sel)) + "\n";
msg += GetCampaignString(GetModuleName(), "msg" + GetPCPlayerName(oPC) + IntToString(sel));
}
CreateChoice(oPC, msg, "");
int m = GetLocalInt(oPC, "privshow");
if (m == 0) {
m = GetCampaignInt(GetModuleName(), "msgcnt" + GetPCPlayerName(oPC));
SetLocalInt(oPC, "msgcnt", m);
SetLocalInt(oPC, "privshow", m);
}
int s = m - 9;
if (s < 1) s = 1;
while(s<=m) {
msg = IntToString(s);
CreateChoice(oPC, GetCampaignString(GetModuleName(), "from" + GetPCPlayerName(oPC) + msg), "priv_pmsg_" + msg);
s++;
}
CreateChoice(oPC, "Add player to private message allow list.", "cc_privadd");
CreateChoice(oPC, "Remove player from private message allow list.", "cc_prem");
CreateChoice(oPC, "Leave a private message.", "cc_pmsg");
if (m > 10) CreateChoice(oPC, "Go back 10 messages.", "priv_back");
} else if (conv == "privadd") {
CreateChoice(oPC, "Select Player:", "");
object oPlay = GetFirstPC();
while(GetIsObjectValid(oPlay) == TRUE) {
CreateChoice(oPC, GetPCPlayerName(oPlay) + " ("+FixName(GetName(oPlay))+")", "priv_sel_" + GetPCPlayerName(oPlay));
oPlay = GetNextPC();
}
} else if (conv == "pmsg") {
CreateChoice(oPC, "Send Private Message to:", "");
ShowAllow(oPC, "priv_psend_");
} else if (conv == "prem") {
CreateChoice(oPC, "Remove Name:", "");
ShowAllow(oPC, "priv_prem_");
} else if (conv == "allow") {
object who = GetLocalObject(oPC, "who");
CreateChoice(oPC, "Allow " + FixName(GetName(who)) + " (" + GetPCPlayerName(who) + ") to send you private messages", "");
CreateChoice(oPC, "Yes.", "priv_yes");
CreateChoice(oPC, "No.", "cc_");
}
}
void ew_chair(object oPC)
{
object seat = GetNearestObjectByTag("sit", oPC);
if (seat != OBJECT_INVALID) {
SetLocalInt(oPC, "emotesit", 1);
AssignCommand(oPC, ActionInteractObject(seat));
}
return;
// get the closest chair, couch and/or throne
object oChair = GetNearestObjectByTag("Chair", oPC);
object oCouch = GetNearestObjectByTag("Couch", oPC);
object oThroneGood = GetNearestObjectByTag("ThroneGood", oPC);
object oStool=GetNearestObjectByTag("Stool", oPC);
// get the distance between the user and each object (-1.0 is the result if no object is found
float fDistanceChair = GetDistanceToObject(oChair);
float fDistanceGood = GetDistanceToObject(oThroneGood);
float fDistanceCouch = GetDistanceToObject(oCouch);
float fDistanceStool = GetDistanceToObject(oStool);
object oSit;
// if any of the objects are invalid (not there), change the return value to a high number so the distance math can work
if (fDistanceChair == -1.0) fDistanceChair =1000.0;
if (fDistanceGood == -1.0) fDistanceGood = 1000.0;
if (fDistanceCouch == -1.0)fDistanceCouch = 1000.0;
if (fDistanceStool == -1.0) fDistanceStool = 1000.0;
// find out which object is closest to the PC
if (fDistanceChair<fDistanceGood && fDistanceChair<fDistanceCouch && fDistanceChair<fDistanceStool) oSit=oChair;
if (fDistanceGood<fDistanceChair && fDistanceGood<fDistanceCouch && fDistanceGood<fDistanceStool) oSit=oThroneGood;
if (fDistanceCouch<fDistanceChair && fDistanceCouch<fDistanceGood && fDistanceCouch<fDistanceStool) oSit=oCouch;
if (fDistanceStool<fDistanceChair && fDistanceStool<fDistanceGood && fDistanceStool<fDistanceCouch) oSit=oStool;
// if no one is sitting in the object the PC is closest to, have him sit in it
if (GetIsObjectValid(GetSittingCreature(oSit)) == FALSE) ActionSit(oSit);
}
void ew_sleep(object oPC)
{
effect eLieDown = EffectSleep();
effect eSnore = EffectVisualEffect (VFX_IMP_SLEEP);
//do not do this its dangerous->effect eSleep = EffectLinkEffects (eLieDown, eSnore);
//ApplyEffectToObject(DURATION_TYPE_INSTANT, eSleep, oPC);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eLieDown, oPC);
ApplyEffectToObject(DURATION_TYPE_INSTANT, eSnore, oPC);
}
void ew_dance(object oPC)
{
AssignCommand(oPC, ActionPlayAnimation( ANIMATION_FIREFORGET_VICTORY2));
DelayCommand(3.0, AssignCommand(oPC, ActionPlayAnimation( ANIMATION_LOOPING_TALK_LAUGHING, 3.0, 2.0)));
DelayCommand(3.0, AssignCommand(oPC, PlayVoiceChat(VOICE_CHAT_LAUGH)));
DelayCommand(5.0, AssignCommand(oPC, ActionPlayAnimation( ANIMATION_FIREFORGET_VICTORY1)));
DelayCommand(8.5, AssignCommand(oPC, ActionPlayAnimation( ANIMATION_FIREFORGET_VICTORY3)));
DelayCommand(11.0, AssignCommand(oPC, ActionPlayAnimation( ANIMATION_LOOPING_GET_MID, 3.0, 2.0)));
DelayCommand(14.5, AssignCommand(oPC, PlayVoiceChat(VOICE_CHAT_LAUGH)));
DelayCommand(13.0, AssignCommand(oPC, ActionPlayAnimation( ANIMATION_FIREFORGET_VICTORY3)));
}
void ew_dance2(object oPC)
{
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_VICTORY1));
DelayCommand(2.0, AssignCommand(oPC, ActionPlayAnimation( ANIMATION_LOOPING_TALK_FORCEFUL, 5.0, 4.0)));
DelayCommand(3.0, AssignCommand(oPC, ActionPlayAnimation( ANIMATION_LOOPING_GET_LOW, 5.0, 4.0)));
DelayCommand(3.1, AssignCommand(oPC, ActionPlayAnimation( ANIMATION_FIREFORGET_VICTORY3)));
DelayCommand(3.2, AssignCommand(oPC, PlayVoiceChat(VOICE_CHAT_LAUGH)));
DelayCommand(11.0, AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_WORSHIP, 3.0, 4.0)));
DelayCommand(12.0, AssignCommand(oPC, ActionPlayAnimation( ANIMATION_FIREFORGET_VICTORY3)));
}
void ew_dance3(object oPC)
{
AssignCommand(oPC, ActionPlayAnimation( ANIMATION_FIREFORGET_BOW));
DelayCommand(2.0, AssignCommand(oPC, ActionPlayAnimation( ANIMATION_LOOPING_TALK_LAUGHING, 4.0, 4.0)));
DelayCommand(3.0, AssignCommand(oPC, PlayVoiceChat(VOICE_CHAT_LAUGH)));
DelayCommand(5.0, AssignCommand(oPC, ActionPlayAnimation( ANIMATION_LOOPING_TALK_NORMAL,4.0, 4.0)));
DelayCommand(8.5, AssignCommand(oPC, ActionPlayAnimation( ANIMATION_LOOPING_TALK_FORCEFUL,5.0,4.0)));
DelayCommand(11.0, AssignCommand(oPC, ActionPlayAnimation( ANIMATION_LOOPING_GET_MID, 3.0, 4.0)));
DelayCommand(12.0, AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_PAUSE_DRUNK, 5.0, 4.0)));
DelayCommand(13.0, AssignCommand(oPC, ActionPlayAnimation(ANIMATION_FIREFORGET_BOW)));
}
void ews_cat(object oPC)
{
switch (Random(5)) {
case 0: AssignCommand ( oPC, PlaySound("c_werecat_bat2")); break;
case 1: AssignCommand ( oPC, PlaySound("c_werecat_bat1")); break;
case 2: AssignCommand ( oPC, PlaySound("c_catlion_bat1")); break;
case 3: AssignCommand ( oPC, PlaySound("c_catpanth_bat1")); break;
case 4: AssignCommand ( oPC, PlaySound("c_cat_bat2")); break;
}
}
void ews_wolf(object oPC)
{
switch (Random(4)) {
case 0: AssignCommand ( oPC, PlaySound("as_an_wolfhowl1")); break;
case 1: AssignCommand ( oPC, PlaySound("as_an_wolfhowl2")); break;
case 2: AssignCommand ( oPC, PlaySound("as_an_wolveshwl1")); break;
case 3: AssignCommand ( oPC, PlaySound("as_an_wolveshow2")); break;
}
}
void ews_growl(object oPC)
{
switch (Random(4)) {
case 0: AssignCommand ( oPC, PlaySound("c_zombwar_bat1")); break;
case 1: AssignCommand ( oPC, PlaySound("c_slaadwek_bat2")); break;
case 2: AssignCommand ( oPC, PlaySound("c_slaadwek_bat2")); break;
case 3: AssignCommand ( oPC, PlaySound("c_slaadpow_bat1")); break;
}
}
void ews_smoan(object oPC)
{
switch (Random(2)) {
case 0: AssignCommand ( oPC, PlaySound("c_wraith_bat1")); break;
case 1: AssignCommand ( oPC, PlaySound("as_pl_zombiem3")); break;
}
}
void ews_break(object oPC)
{
switch (Random(7)) {
case 0: AssignCommand( oPC, PlaySound("as_cv_barglass3")); break;
case 1: AssignCommand( oPC, PlaySound("as_cv_claybreak1")); break;
case 2: AssignCommand( oPC, PlaySound("as_cv_claybreak2")); break;
case 3: AssignCommand( oPC, PlaySound("as_cv_claybreak3")); break;
case 4: AssignCommand( oPC, PlaySound("as_cv_glasbreak3")); break;
case 5: AssignCommand( oPC, PlaySound("as_cv_glasbreak2")); break;
case 6: AssignCommand( oPC, PlaySound("as_cv_glasbreak1")); break;
}
}
void ews_door(object oPC)
{
switch (Random(2)) {
case 0: AssignCommand ( oPC, PlaySound("as_sw_woodplate1")); break;
case 1: AssignCommand ( oPC, PlaySound("as_dr_woodmedcl1")); break;
}
}
void ews_creak(object oPC)
{
switch (Random(2)) {
case 0: AssignCommand ( oPC, PlaySound("as_cv_woodcreak2")); break;
case 1: AssignCommand ( oPC, PlaySound("as_cv_florcreak2")); break;
}
}
void ews_thunder(object oPC)
{
switch (Random(7)) {
case 0: AssignCommand ( oPC, PlaySound("as_wt_thundercl1")); break;
case 1: AssignCommand ( oPC, PlaySound("as_wt_thundercl2")); break;
case 2: AssignCommand ( oPC, PlaySound("as_wt_thundercl3")); break;
case 3: AssignCommand ( oPC, PlaySound("as_wt_thundercl4")); break;
case 4: AssignCommand ( oPC, PlaySound("as_wt_thunderds1")); break;
case 5: AssignCommand ( oPC, PlaySound("as_wt_thunderds2")); break;
case 6: AssignCommand ( oPC, PlaySound("as_wt_thunderds3")); break;
}
}
void ews_twig(object oPC)
{
switch (Random(5)) {
case 0: AssignCommand ( oPC, PlaySound("fs_grass_hard3")); break;
case 1: AssignCommand ( oPC, PlaySound("as_na_branchsnp1")); break;
case 2: AssignCommand ( oPC, PlaySound("as_na_branchsnp2")); break;
case 3: AssignCommand ( oPC, PlaySound("as_na_branchsnp3")); break;
case 4: AssignCommand ( oPC, PlaySound("as_na_branchsnp4")); break;
}
}
void roll_check(object oPC, int nRank, string nam)
{
int nRoll=d20();
int nResult=nRoll+nRank;
string sRoll=IntToString(nRoll);
string sRank=IntToString(nRank);
string sResult=IntToString(nResult);
AssignCommand( oPC, ActionPlayAnimation (ANIMATION_LOOPING_GET_MID, 3.0, 3.0));
AssignCommand( oPC, SpeakString(nam+" Check, Roll: "+sRoll+" Modifier: "+sRank+" = "+sResult));
}
void roll_dice(object oPC, int nRoll, string nam)
{
string sName = FixName(GetName(oPC));
string sRoll=IntToString(nRoll);
AssignCommand( oPC, ActionPlayAnimation (ANIMATION_LOOPING_GET_MID, 3.0, 3.0));
DelayCommand( 2.0, AssignCommand( oPC, SpeakString(sName+" rolled a " +nam+" and gets a: "+sRoll)));
}
void DyeIt(object targ, int slot)
{
object item = GetItemInSlot(slot, targ);
if (item != OBJECT_INVALID) {
location loc = GetLocation(GetObjectByTag("wp_dye"));
object mod = CopyObject(item, loc);
DestroyObject(mod, 2.0);
mod = CopyItemAndModify(mod, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_CLOTH1, Random(64));
DestroyObject(mod, 2.0);
mod = CopyItemAndModify(mod, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_CLOTH2, Random(64));
DestroyObject(mod, 2.0);
mod = CopyItemAndModify(mod, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_LEATHER1, Random(64));
DestroyObject(mod, 2.0);
mod = CopyItemAndModify(mod, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_LEATHER2, Random(64));
DestroyObject(mod, 2.0);
mod = CopyItemAndModify(mod, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_METAL1, Random(64));
DestroyObject(mod, 2.0);
mod = CopyItemAndModify(mod, ITEM_APPR_TYPE_ARMOR_COLOR, ITEM_APPR_ARMOR_COLOR_METAL2, Random(64));
DestroyObject(mod, 2.0);
AssignCommand(targ, DestroyObject(item));
object new = CopyObject(mod, GetLocation(targ), targ);
AssignCommand(targ, ActionEquipItem(new, slot));
}
}
string AllowAdd(object scribe, string pname, string aname)
{
string allow = GetCampaignString(GetModuleName(), "allow"+pname);
if (allow == "") allow = "~0~~1~~2~~3~~4~~5~~6~~7~~8~~9~~10";
//allow = "~0~~1~~2~~3~~4~~5~~6~~7~~8~~9~~10";
int p = FindSubString(allow, "~~");
if (p < 1) {
AssignCommand(scribe, SpeakString("cannot add, " + pname + "'s private message allow list is full!"));
allow = "";
} else {
allow = GetStringLeft(allow, p) + aname + GetSubString(allow, p + 1, 500);
}
return allow;
}
void AllowDel(string player, string who) {
string allow = GetCampaignString(GetModuleName(), "allow" + player);
int l = GetStringLength(who);
int p = FindSubString(allow, who + "~");
if (p > 1) {
allow = GetStringLeft(allow, p) + "~" + GetSubString(allow, p + l, 500);
}
SetCampaignString(GetModuleName(), "allow" + player, allow);
//SpeakString(allow);
}
object FindPlayer(string name)
{
object oPlay = GetFirstPC();
while(GetIsObjectValid(oPlay) == TRUE) {
if (name == GetPCPlayerName(oPlay)) {
return oPlay;
}
oPlay = GetNextPC();
}
return OBJECT_INVALID;
}
void DoAction(int n, object oPC) // Perform action the user selected from custom conversation
{
string act = GetLocalString(oPC, "cc_act" + IntToString(n));
int lev = GetLocalInt(oPC, "cc_level");
effect TheEffect;
if (act == "<<") { // Previous menu
SetLocalInt(oPC, "cc_level", lev-2);
InitConv(oPC, GetLocalString(oPC, "cc_prev" + IntToString(lev-2)));
} else if (act == "") { // No action
// WriteTimestampedLogEntry("No action");
} else if (GetStringLeft(act, 3) == "cc_") { // Handle sub conversations
InitConv(oPC, GetSubString(act, 3, GetStringLength(act)-3));
} else if (GetStringLeft(act, 2) == "s_") { // Handle summon type
SetLocalString(oPC, "mtype", GetSubString(act, 2, GetStringLength(act)-2));
InitConv(oPC, "qty");
} else if (GetStringLeft(act, 2) == "q_") { // Handle summon qantity
InitConv(oPC, ""); // end conversation
location lSpawn = GetLocation(GetNearestObjectByTag("Spawn"));
int i;
object monster;
TheEffect=EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_2);
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, TheEffect, lSpawn);
object cc_conv=GetLocalObject(oPC, "cc_conv");
for(i = 0; i < StringToInt(GetSubString(act, 2, GetStringLength(act)-2)); i++) {
monster = CreateObject(OBJECT_TYPE_CREATURE, GetLocalString(oPC, "mtype"), lSpawn, TRUE, "s_"+GetTag(cc_conv));
}
} else if (GetStringLeft(act, 2) == "p_") { // Handle polymorph
TheEffect = EffectPolymorph(StringToInt(GetSubString(act, 2, GetStringLength(act)-2)));
ApplyEffectToObject(DURATION_TYPE_INSTANT,TheEffect, oPC);
TheEffect=EffectVisualEffect(VFX_DUR_SPELLTURNING);
ApplyEffectToObject(DURATION_TYPE_INSTANT,TheEffect, oPC);
TheEffect=EffectHeal(200);
ApplyEffectToObject(DURATION_TYPE_INSTANT,TheEffect, oPC);
} else if (GetStringLeft(act, 4) == "al_c") { // Align Chaotic
int shift = StringToInt(GetSubString(act, 4, GetStringLength(act)-4));
RemoveFromParty(oPC);
AdjustAlignment(GetLocalObject(oPC, "target"), ALIGNMENT_CHAOTIC, shift);
ExecuteScript("cc_align", OBJECT_SELF);
} else if (GetStringLeft(act, 4) == "al_l") { // Align Lawful
int shift = StringToInt(GetSubString(act, 4, GetStringLength(act)-4));
RemoveFromParty(oPC);
AdjustAlignment(GetLocalObject(oPC, "target"), ALIGNMENT_LAWFUL, shift);
ExecuteScript("cc_align", OBJECT_SELF);
} else if (GetStringLeft(act, 4) == "al_g") { // Align Good
int shift = StringToInt(GetSubString(act, 4, GetStringLength(act)-4));
RemoveFromParty(oPC);
AdjustAlignment(GetLocalObject(oPC, "target"), ALIGNMENT_GOOD, shift);
ExecuteScript("cc_align", OBJECT_SELF);
} else if (GetStringLeft(act, 4) == "al_e") { // Align Evil
int shift = StringToInt(GetSubString(act, 4, GetStringLength(act)-4));
RemoveFromParty(oPC);
AdjustAlignment(GetLocalObject(oPC, "target"), ALIGNMENT_EVIL, shift);
ExecuteScript("cc_align", OBJECT_SELF);
} else if (GetStringLeft(act, 3) == "ew_") { // Handle emote wand
act = GetSubString(act, 3, GetStringLength(act)-3);
if (act == "sit") {
AssignCommand(oPC, ActionPlayAnimation( ANIMATION_LOOPING_SIT_CROSS, 1.0, 6000.0));
} else if (act == "chair") {
ew_chair(oPC);
} else if (act == "sleep") {
ew_sleep(oPC);
} else if (act == "worship") {
AssignCommand(oPC, ActionPlayAnimation( ANIMATION_LOOPING_WORSHIP, 1.0, 6000.0));
} else if (act == "pray") {
AssignCommand(oPC, ActionPlayAnimation( ANIMATION_LOOPING_MEDITATE, 1.0, 6000.0));
} else if (act == "read") {
AssignCommand(oPC, ActionPlayAnimation( ANIMATION_FIREFORGET_READ));
DelayCommand(3.0, AssignCommand( oPC, ActionPlayAnimation( ANIMATION_FIREFORGET_READ)));
} else if (act == "drunk") {
AssignCommand(oPC, ActionPlayAnimation( ANIMATION_LOOPING_PAUSE_DRUNK, 1.0, 6000.0));
} else if (act == "dance") {
ew_dance(oPC);
} else if (act == "dance2") {
ew_dance2(oPC);
} else if (act == "dance3") {
ew_dance3(oPC);
} else if (act == "dance4") {
ExecuteScript("ew_dance4", oPC);
} else if (act == "strip") {
ExecuteScript("ew_strip", oPC);
} else if (act == "strip2") {
ExecuteScript("ew_strip2", oPC);
} else if (act == "dead") {
AssignCommand(oPC, ActionPlayAnimation(ANIMATION_LOOPING_DEAD_FRONT, 1.0, 6000.0));
} else if (act == "char") {
roll_check(oPC, GetAbilityModifier(ABILITY_CHARISMA, oPC), "Charisma");
} else if (act == "con") {
roll_check(oPC, GetAbilityModifier(ABILITY_CONSTITUTION, oPC), "Constitution");
} else if (act == "dex") {
roll_check(oPC, GetAbilityModifier(ABILITY_DEXTERITY, oPC), "Dexterity");
} else if (act == "int") {
roll_check(oPC, GetAbilityModifier(ABILITY_INTELLIGENCE, oPC), "Intelligence");
} else if (act == "str") {
roll_check(oPC, GetAbilityModifier(ABILITY_STRENGTH, oPC), "Strength");
} else if (act == "wis") {
roll_check(oPC, GetAbilityModifier(ABILITY_WISDOM, oPC), "Wisdom");
} else if (act == "trap") {
roll_check(oPC, GetSkillRank(SKILL_DISABLE_TRAP, oPC), "Disable Trap");
} else if (act == "disc") {
roll_check(oPC, GetSkillRank(SKILL_DISCIPLINE, oPC), "Discipline");
} else if (act == "listen") {
roll_check(oPC, GetSkillRank(SKILL_LISTEN, oPC), "Listen");
} else if (act == "lore") {
roll_check(oPC, GetSkillRank(SKILL_LORE, oPC), "Lore");
} else if (act == "open") {
roll_check(oPC, GetSkillRank(SKILL_OPEN_LOCK, oPC), "Open Lock");
} else if (act == "perf") {
roll_check(oPC, GetSkillRank(SKILL_PERFORM, oPC), "Perform");
} else if (act == "pers") {
roll_check(oPC, GetSkillRank(SKILL_PERSUADE, oPC), "Persuade");
} else if (act == "search") {
roll_check(oPC, GetSkillRank(SKILL_PICK_POCKET, oPC), "Search");
} else if (act == "spell") {
roll_check(oPC, GetSkillRank(SKILL_SPELLCRAFT, oPC), "Spellcraft");
} else if (act == "spot") {
roll_check(oPC, GetSkillRank(SKILL_SPOT, oPC), "Spot");
} else if (act == "conc") {
roll_check(oPC, GetSkillRank(SKILL_CONCENTRATION, oPC), "Concentration");
} else if (act == "hide") {
roll_check(oPC, GetSkillRank(SKILL_HIDE, oPC), "Hide");
} else if (act == "taunt") {
roll_check(oPC, GetSkillRank(SKILL_TAUNT, oPC), "Taunt");
} else if (act == "d4") {
roll_dice(oPC, d4(), "d4");
} else if (act == "d6") {
roll_dice(oPC, d6(), "d6");
} else if (act == "d8") {
roll_dice(oPC, d8(), "d8");
} else if (act == "d10") {
roll_dice(oPC, d10(), "d10");
} else if (act == "d12") {
roll_dice(oPC, d12(), "d12");
} else if (act == "d20") {
roll_dice(oPC, d20(), "d20");
} else if (act == "d100") {
roll_dice(oPC, d100(), "d100");
} else if (act == "dam") {
ExecuteScript("ew_dammit", oPC);
} else if (act == "flip") {
ExecuteScript("ew_flipper", oPC);
} else if (act == "fish") {
ExecuteScript("ew_fish", oPC);
} else if (act == "wow") {
ExecuteScript("ew_wow", oPC);
} else if (act == "fly1") {
effect eFly = EffectDisappear();
effect eFlyDown = EffectAppear();
effect ePulseWind = EffectVisualEffect(VFX_IMP_PULSE_WIND);
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eFly, oPC );
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ePulseWind, oPC );
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eFlyDown, oPC );
} else if (act == "fly2") {
effect eFly = EffectDisappear();
effect eFlyDown = EffectAppear();
effect ePulseWind = EffectVisualEffect(VFX_IMP_PULSE_WIND);
effect eTakeOff1 = EffectVisualEffect(VFX_FNF_FIREBALL);
DelayCommand(0.6,ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eTakeOff1, oPC));
DelayCommand(0.5,ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eFly, oPC));
DelayCommand(0.6,ApplyEffectToObject(DURATION_TYPE_TEMPORARY, ePulseWind, oPC));
DelayCommand(0.7,ApplyEffectToObject(DURATION_TYPE_TEMPORARY, eFlyDown, oPC));
} else if (act == "fly3") {
effect edumb = EffectVisualEffect(VFX_IMP_BLIND_DEAF_M);
effect edumb1 = EffectVisualEffect(VFX_IMP_HARM);
effect edumb2 = EffectVisualEffect(VFX_IMP_PULSE_COLD);
effect edumb3 = EffectVisualEffect(VFX_IMP_PULSE_FIRE);
effect edumb4 = EffectVisualEffect(VFX_IMP_SUPER_HEROISM);
effect edumb5 = EffectVisualEffect(VFX_IMP_UNSUMMON);
effect edumb19 = EffectDisappear();
effect edumb21 = EffectAppear();
DelayCommand(0.5, ApplyEffectToObject(DURATION_TYPE_INSTANT,edumb,oPC));
DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_INSTANT,edumb1,oPC));
DelayCommand(1.5, ApplyEffectToObject(DURATION_TYPE_INSTANT,edumb2,oPC));
DelayCommand(2.0, ApplyEffectToObject(DURATION_TYPE_INSTANT,edumb3,oPC));
DelayCommand(2.5, ApplyEffectToObject(DURATION_TYPE_INSTANT,edumb4,oPC));
DelayCommand(3.0, ApplyEffectToObject(DURATION_TYPE_INSTANT,edumb5,oPC));
DelayCommand(3.5,ApplyEffectToObject(DURATION_TYPE_TEMPORARY,edumb19,oPC));
DelayCommand(5.0,ApplyEffectToObject(DURATION_TYPE_TEMPORARY,edumb21,oPC));
} else if (act == "fly4") {
effect edumb1 = EffectVisualEffect(VFX_IMP_HEAD_ACID);
effect edumb2 = EffectVisualEffect(VFX_IMP_HEAD_COLD);
effect edumb3 = EffectVisualEffect(VFX_IMP_HEAD_ELECTRICITY);
effect edumb4 = EffectVisualEffect(VFX_IMP_HEAD_EVIL);
effect edumb5 = EffectVisualEffect(VFX_IMP_HEAD_FIRE);
effect edumb6 = EffectVisualEffect(VFX_IMP_HEAD_HEAL);
effect edumb7 = EffectVisualEffect(VFX_IMP_HEAD_HOLY);
effect edumb8 = EffectVisualEffect(VFX_IMP_HEAD_MIND);
effect edumb9 = EffectVisualEffect(VFX_IMP_HEAD_NATURE);
effect edumb10 = EffectVisualEffect(VFX_IMP_HEAD_ODD);
effect edumb11 = EffectVisualEffect(VFX_IMP_HEAD_SONIC);
effect edumb12 = EffectVisualEffect(VFX_IMP_HARM);
effect edumb13 = EffectVisualEffect(VFX_IMP_PULSE_COLD);
effect edumb14 = EffectVisualEffect(VFX_IMP_PULSE_FIRE);
effect edumb15 = EffectVisualEffect(VFX_IMP_PULSE_HOLY);
effect edumb16 = EffectVisualEffect(VFX_FNF_HOWL_ODD);
effect edumb17 = EffectVisualEffect(VFX_IMP_SUPER_HEROISM);
effect edumb18 = EffectVisualEffect(VFX_IMP_UNSUMMON);
effect edumb19 = EffectDisappear();
effect edumb20 = EffectVisualEffect(VFX_COM_CHUNK_RED_LARGE);
effect edumb21 = EffectAppear();
DelayCommand(1.0, ApplyEffectToObject(DURATION_TYPE_INSTANT,edumb1,oPC));
DelayCommand(1.5, ApplyEffectToObject(DURATION_TYPE_INSTANT,edumb2,oPC));
DelayCommand(2.0, ApplyEffectToObject(DURATION_TYPE_INSTANT,edumb3,oPC));
DelayCommand(2.5, ApplyEffectToObject(DURATION_TYPE_INSTANT,edumb4,oPC));
DelayCommand(3.0, ApplyEffectToObject(DURATION_TYPE_INSTANT,edumb5,oPC));
DelayCommand(3.5, ApplyEffectToObject(DURATION_TYPE_INSTANT,edumb6,oPC));
DelayCommand(4.0, ApplyEffectToObject(DURATION_TYPE_INSTANT,edumb7,oPC));
DelayCommand(4.5, ApplyEffectToObject(DURATION_TYPE_INSTANT,edumb8,oPC));
DelayCommand(5.0, ApplyEffectToObject(DURATION_TYPE_INSTANT,edumb9,oPC));
DelayCommand(5.5, ApplyEffectToObject(DURATION_TYPE_INSTANT,edumb10,oPC));
DelayCommand(6.0, ApplyEffectToObject(DURATION_TYPE_INSTANT,edumb11,oPC));
DelayCommand(6.5, ApplyEffectToObject(DURATION_TYPE_INSTANT,edumb12,oPC));
DelayCommand(7.0, ApplyEffectToObject(DURATION_TYPE_INSTANT,edumb13,oPC));
DelayCommand(7.5, ApplyEffectToObject(DURATION_TYPE_INSTANT,edumb14,oPC));
DelayCommand(8.0, ApplyEffectToObject(DURATION_TYPE_INSTANT,edumb15,oPC));
DelayCommand(8.5, ApplyEffectToObject(DURATION_TYPE_INSTANT,edumb16,oPC));
DelayCommand(9.0, ApplyEffectToObject(DURATION_TYPE_INSTANT,edumb17,oPC));
DelayCommand(9.5, ApplyEffectToObject(DURATION_TYPE_INSTANT,edumb18,oPC));
DelayCommand(10.0,ApplyEffectToObject(DURATION_TYPE_TEMPORARY,edumb19,oPC));
DelayCommand(11.5,ApplyEffectToObject(DURATION_TYPE_INSTANT,edumb20,oPC));
DelayCommand(12.0,ApplyEffectToObject(DURATION_TYPE_TEMPORARY,edumb21,oPC));
} else if (act == "smoke") {
ExecuteScript("ew_smoke", oPC);
} else if (act == "back") {
AssignCommand(oPC,ActionPlayAnimation(ANIMATION_LOOPING_DEAD_BACK, 1.0, 30000.0));
} else if (act == "front") {
AssignCommand(oPC,ActionPlayAnimation(ANIMATION_LOOPING_DEAD_FRONT, 1.0, 30000.0));
} else if (act == "fart") {
DelayCommand(1.0, ExecuteScript("ew_flatuence", oPC));
} else if (act == "freeze") {
effect eff = GetFirstEffect(oPC);
while (GetIsEffectValid(eff)) {
//SendMessageToPC(oPC, "eff = " + IntToString(GetEffectType(eff)) + " - " + IntToString(VFX_DUR_FREEZE_ANIMATION));
if (GetEffectType(eff) == 74) {
RemoveEffect(oPC, eff);
return;
}
eff = GetNextEffect(oPC);
}
eff = EffectVisualEffect(VFX_DUR_FREEZE_ANIMATION);
DelayCommand(0.1f, ApplyEffectToObject(DURATION_TYPE_PERMANENT, eff, oPC));
} else if (act == "lev1") {
location loc = GetLocation(oPC);
vector vect = GetPositionFromLocation(loc);
vect.z = 10.0;
vect.y += 5.0;
loc = Location(GetAreaFromLocation(loc), vect, GetFacingFromLocation(loc));
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectDisappearAppear(loc), oPC, 0.0);
// AssignCommand(oPC, JumpToLocation(loc));
}
} else if (GetStringLeft(act, 4) == "ews_") { // Handle emote wand sounds
act = GetSubString(act, 4, GetStringLength(act)-4);
if (act == "cat") ews_cat(oPC);
else if (act == "wolf") ews_wolf(oPC);
else if (act == "cow") AssignCommand ( oPC, PlaySound("as_an_cow" + IntToString(Random(2)+1)));
else if (act == "crow") AssignCommand ( oPC, PlaySound("as_an_crow" + IntToString(Random(2)+1)));
else if (act == "owl") AssignCommand ( oPC, PlaySound("as_an_owlhoot" + IntToString(Random(2)+1)));
else if (act == "mcough") AssignCommand ( oPC, PlaySound("as_pl_coughm" + IntToString(Random(7)+1)));
else if (act == "mcry") AssignCommand ( oPC, PlaySound("as_pl_cryingm" + IntToString(Random(3)+1)));
else if (act == "mdie") AssignCommand ( oPC, PlaySound("as_pl_screamm" + IntToString(Random(5)+1)));
else if (act == "wscream") AssignCommand ( oPC, PlaySound("as_pl_screamf" + IntToString(Random(6)+1)));
else if (act == "wcough") AssignCommand ( oPC, PlaySound("as_pl_coughf" + IntToString(Random(7)+1)));
else if (act == "wcry") AssignCommand ( oPC, PlaySound("as_pl_cryingf" + IntToString(Random(3)+1)));
else if (act == "growl") ews_growl(oPC);
else if (act == "slaugh") AssignCommand ( oPC, PlaySound("as_pl_lafspook" + IntToString(Random(3)+1)));
else if (act == "smoan") ews_smoan(oPC);
else if (act == "break") ews_break(oPC);
else if (act == "door") ews_door(oPC);
else if (act == "creak") ews_creak(oPC);
else if (act == "thunder") ews_thunder(oPC);
else if (act == "twig") ews_twig(oPC);
} else if (GetStringLeft(act, 3) == "as_") { // Handle emote wand direct sounds
AssignCommand(oPC, PlaySound(act));
} else if (GetStringLeft(act, 2) == "c_") { // Handle emote wand direct sounds
AssignCommand(oPC, PlaySound(act));
} else if (GetStringLeft(act, 3) == "sp_") { // Handle speak voicechat
int typ = StringToInt(GetSubString(act, 3, GetStringLength(act)-3));
DelayCommand(0.3, PlayVoiceChat(typ,oPC));
// AssignCommand(oPC,ActionDoCommand(PlayVoiceChat(typ,oPC)));
} else if (GetStringLeft(act, 3) == "gd_") { // Handle get drunk
string nam = GetSubString(act, 3, GetStringLength(act)-3);
ExecuteScript(nam, OBJECT_SELF);
DelayCommand(30.0, SetCommandable(TRUE,oPC));
} else if (GetStringLeft(act, 3) == "sb_") { // Handle scoreboard
string typ = GetSubString(act, 3, GetStringLength(act)-3);
if (typ == "scores") {
object PC= GetFirstPC();
string SpeakText = "Kill Counter\n";
SpeakText += "Yellow dots=Killed most monsters\nRed dots=Killed most players\nPixie Dust=Died the most\n";
SpeakText += "MonsterPoints/PlayerKills/Deaths\n\n";
while (PC!= OBJECT_INVALID)
{
if (GetIsDM(PC) == FALSE)
{
SpeakText += FixName(GetName(PC)) + " ";
SpeakText += IntToString(GetLocalInt(PC,"monster")) + "/";
SpeakText += IntToString(GetLocalInt(PC,"killed")) + "/";
SpeakText += IntToString(GetLocalInt(PC,"died"));
SpeakText += "\n";
}
PC= GetNextPC();
}
AssignCommand(GetNearestObjectByTag("scoreboard", oPC), SpeakString(SpeakText));
} else if (typ == "stats") {
string name = FixName(GetName(oPC));
int strength = GetAbilityScore(oPC, ABILITY_STRENGTH);
int dexterity = GetAbilityScore(oPC, ABILITY_DEXTERITY);
int charisma = GetAbilityScore(oPC, ABILITY_CHARISMA);
int intelligence = GetAbilityScore(oPC, ABILITY_INTELLIGENCE);
int constitution = GetAbilityScore(oPC, ABILITY_CONSTITUTION);
int wisdom = GetAbilityScore(oPC, ABILITY_WISDOM);
int Fortitude = GetFortitudeSavingThrow(oPC);
int Will = GetWillSavingThrow(oPC);
int Reflex = GetReflexSavingThrow(oPC);
int AC = GetAC(oPC);
int Age = GetAge(oPC);
string stats = name + " has " + IntToString(strength) + " strength, " + IntToString(dexterity) + " dex, " + IntToString(charisma) + " charisma, " + IntToString(intelligence) + " int, " + IntToString(wisdom) + " wisdom, " + IntToString(constitution) + " constitution, " + IntToString(Fortitude) + " Fort. " + IntToString(Will) + " Will, " + IntToString(Reflex) + " Reflex, " + IntToString(AC) + " AC and is " + IntToString(Age) + " years old." ;
AssignCommand(GetNearestObjectByTag("scoreboard", oPC), SpeakString(stats));
} else if (typ == "toys") {
int s, dm = isdm(oPC);
int tcnt = GetLocalInt(GetModule(), "tcnt");
int toys = GetLocalInt(oPC, "toys");
if (toys == 0 && dm != TRUE) {
SendMessageToPC(oPC, "None of the toys will work for you here!");
} else {
SendMessageToPC(oPC, "You may use the following toys here:");
}
for(s=0; s<tcnt; s++) {
if ((toys & (1<<s)) != 0 || dm == TRUE) {
SendMessageToPC(oPC, GetLocalString(GetModule(), "tname"+IntToString(s)));
}
}
} else if (typ == "leader") {
object oLeader = GetFactionLeader(oPC);
if (GetIsObjectValid(oLeader) == TRUE) {
AssignCommand(oPC, JumpToObject(oLeader));
}
} else if (typ == "main") {
object wp = GetWaypointByTag("WP_Main");
if (GetIsObjectValid(wp) == TRUE) {
AssignCommand(oPC, JumpToObject(wp));
}
} else if (typ == "emote") {
CreateItemOnObject("emotewand", oPC);
} else if (typ == "mat") {
CreateItemOnObject("mat", oPC);
}
} else if (GetStringLeft(act, 3) == "pj_") { // Handle jump to player
string nam = GetSubString(act, 3, GetStringLength(act)-3);
// nam = GetStringLeft(nam, FindSubString(nam, " ("));
object oPlay = GetFirstPC();
while(GetIsObjectValid(oPlay) == TRUE) {
if (nam == GetName(oPlay)) {
AssignCommand(oPC, JumpToLocation(GetLocation(oPlay)));
}
oPlay = GetNextPC();
}
} else if (GetStringLeft(act, 3) == "aj_") { // Handle jump to area
int cnt = StringToInt(GetSubString(act, 3, GetStringLength(act)-3));
AssignCommand(oPC, JumpToObject(GetObjectByTag("jump", cnt)));
} else if (GetStringLeft(act, 4) == "sel_") { // Handle select player
string nam = GetSubString(act, 4, GetStringLength(act)-4);
object oPlay = GetFirstPC();
while(GetIsObjectValid(oPlay) == TRUE) {
if (nam == GetName(oPlay)) {
SetLocalString(OBJECT_SELF, "tool", GetLocalString(OBJECT_SELF, "action"));
SetLocalObject(OBJECT_SELF, "target",oPlay);
DelayCommand(1.0,ExecuteScript("x_activate", OBJECT_SELF));
break;
}
oPlay = GetNextPC();
}
} else if (GetStringLeft(act, 3) == "xp_") { // Handle XP
object oTarget = GetLocalObject(oPC, "target");
int xp = StringToInt(GetSubString(act, 3, GetStringLength(act)-3));
SetXP(oTarget, xp);
} else if (GetStringLeft(act, 3) == "cs_") { // cast spell
int spell = StringToInt(GetSubString(act, 3, 3));
object oTarget = GetLocalObject(oPC, "target");
//SpeakString(GetName(oPC) + " - " + GetName(oTarget), TALKVOLUME_SHOUT);
DelayCommand(0.5, AssignCommand(oTarget, ActionCastSpellAtObject(spell, oPC, METAMAGIC_ANY, TRUE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE)));
if (GetLocalObject(oPC, "old") != OBJECT_INVALID) ActionStartConversation(oPC, "customconv", TRUE);
} else if (GetStringLeft(act, 3) == "dis") { // dispel
int spell = SPELL_GREATER_DISPELLING;
object oTarget = GetLocalObject(oPC, "target");
AssignCommand(oTarget, ActionCastSpellAtObject(spell, oPC, METAMAGIC_ANY, TRUE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE));
AssignCommand(oTarget, ActionCastSpellAtLocation(spell, GetLocation(oPC), METAMAGIC_ANY, TRUE, PROJECTILE_PATH_TYPE_DEFAULT, TRUE));
if (GetLocalObject(oPC, "old") != OBJECT_INVALID) ActionStartConversation(oPC, "customconv", TRUE);
} else if (act == "me") { // I'll cast
SetLocalObject(oPC, "old", GetLocalObject(oPC, "target"));
SetLocalObject(oPC, "target", oPC);
ClearAllActions(TRUE);
InitConv(oPC, "sp" + IntToString(GetLocalInt(oPC, "spell")));
} else if (act == "you") { // you cast
SetLocalObject(oPC, "target", GetLocalObject(oPC, "old"));
DeleteLocalObject(oPC, "old");
ClearAllActions(TRUE);
InitConv(oPC, "sp" + IntToString(GetLocalInt(oPC, "spell")));
} else if (act == "ca_orig") { // go back to original appearance
int ap = GetLocalInt(oPC, "old_ap");
DelayCommand(0.5, SetCreatureAppearanceType(oPC, ap));
} else if (GetStringLeft(act, 3) == "ca_") { // change appearance
int ap = StringToInt(GetSubString(act, 3, 5));
DelayCommand(0.5, SetCreatureAppearanceType(oPC, ap));
} else if (GetStringLeft(act, 4) == "afa_") { // add favourite appearance
int s = StringToInt(GetSubString(act, 4, 5));
//SpeakString(act + " s = " + IntToString(s)+ " app = " + IntToString(GetAppearanceType(oPC)));
SetCampaignInt(GetModuleName(), "app" + IntToString(s), GetAppearanceType(oPC) + 1, oPC);
SetLocalInt(oPC, "cc_level", GetLocalInt(oPC, "cc_level") - 2);
InitConv(oPC, "favapp");
} else if (GetStringLeft(act, 3) == "fa_") { // favourite appearance
int ap = StringToInt(GetSubString(act, 3, 5));
if (ap != -1) DelayCommand(0.5, SetCreatureAppearanceType(oPC, ap));
} else if (GetStringLeft(act, 4) == "rec_") { // Jump to saved location
string num = GetSubString(act, 4, 5);
location loc = GetLocalLocation(oPC, "loc" + num);
float delay = 0.1, gdelay = 0.1;
if (GetName(GetAreaFromLocation(loc)) == GetName(GetArea(oPC))) delay = 2.0;
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_DUR_GHOSTLY_VISAGE), oPC, 5.0);
DelayCommand(delay, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_MYSTICAL_EXPLOSION), oPC));
DelayCommand(delay + 0.1, AssignCommand(oPC, JumpToLocation(loc)));
DelayCommand(delay + 0.1, ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectAppear(), oPC));
} else if (GetStringLeft(act, 4) == "sav_") { // Save location
string num = GetSubString(act, 4, 5);
SetLocalLocation(oPC, "loc" + num, GetLocation(oPC));
SetLocalInt(oPC, "cc_level", GetLocalInt(oPC, "cc_level") - 1);
AssignCommand(oPC, ActionCastFakeSpellAtObject(SPELL_GREATER_DISPELLING, oPC));
DelayCommand(1.5, ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectVisualEffect(VFX_FNF_TIME_STOP), oPC));
InitConv(oPC, "recall");
} else if (GetStringLeft(act, 4) == "toy_") { // toymaker
string typ = GetSubString(act, 4, GetStringLength(act)-4);
object Target = GetLocalObject(oPC, "target");
if (typ == "deactivate") {
ZapToys(oPC, Target, 0);
} else if (typ == "zap") {
ZapToys(oPC, Target, 1);
} else if (typ == "activate") {
int s, toys = 0, tcnt = GetLocalInt(GetModule(), "tcnt");
string ref;
object item;
for(s=0; s<tcnt; s++) {
ref = GetLocalString(GetModule(), "tref"+IntToString(s));
item = GetItemPossessedBy(Target, "toy_"+ref);
if (item != OBJECT_INVALID) {
SendMessageToPC(oPC, GetName(item) + " activated for " + GetName(Target));
SendMessageToPC(Target, GetName(item) + " activated!");
toys |= (1<<s);
}
}
SetLocalInt(Target, "toys", toys);
SetCampaignInt(GetModuleName(), "toys", GetLocalInt(Target, "toys"), Target);
} else {
string msg = " activated for ";
string ref = GetLocalString(GetModule(), "tref"+typ);
object item = GetItemPossessedBy(Target, "toy_"+ref);
if (item == OBJECT_INVALID) {
item = CreateItemOnObject(ref, Target);
msg = " given to ";
}
SetLocalInt(item, "id", StringToInt(typ));
SetLocalInt(Target, "toys", GetLocalInt(Target, "toys") | (1<<StringToInt(typ)));
SetCampaignInt(GetModuleName(), "toys", GetLocalInt(Target, "toys"), Target);
SendMessageToPC(oPC, GetName(item) + msg + GetName(Target));
SendMessageToPC(Target, GetName(item) + msg + GetName(Target));
}
} else if (GetStringLeft(act, 4) == "dye_") { // dye merchant
string typ = GetSubString(act, 4, GetStringLength(act)-4);
if (typ == "book") {
CreateItemOnObject("dyecolorcodes", oPC);
} else if (typ == "carm") {
CopyItem(GetItemInSlot(INVENTORY_SLOT_CHEST, oPC), oPC);
} else if (typ == "chelm") {
CopyItem(GetItemInSlot(INVENTORY_SLOT_HEAD, oPC), oPC);
} else if (typ == "arm") {
DyeIt(oPC, INVENTORY_SLOT_CHEST);
} else if (typ == "helm") {
DyeIt(oPC, INVENTORY_SLOT_HEAD);
} else {
DelayCommand(1.0, OpenStore(GetObjectByTag(typ), oPC));
}
} else if (GetStringLeft(act, 4) == "msg_") { // message board
string typ = GetSubString(act, 4, 20);
if (typ == "new") {
AssignCommand(GetNearestObjectByTag("scribe", oPC), SpeakString("Speak message title"));
DeleteLocalString(oPC, "to");
SetLocalString(oPC, "title", ".");
InitConv(oPC, ""); // end conversation
} else if (typ == "post") {
int msgcnt = GetLocalInt(GetModule(), "msgcnt") + 1;
SetLocalInt(GetModule(), "msgcnt", msgcnt);
SetCampaignInt(GetModuleName(), "msgcnt", msgcnt);
string msg = IntToString(msgcnt);
SetCampaignString(GetModuleName(), "from" + msg, GetLocalString(oPC, "title"));
SetCampaignString(GetModuleName(), "msg" + msg, GetLocalString(oPC, "msg"));
SetLocalInt(oPC, "showmsg", msgcnt);
SetLocalInt(oPC, "sel", msgcnt);
SetLocalInt(oPC, "cc_level", 0);
InitConv(oPC, "msg");
} else if (typ == "back") {
int m = GetLocalInt(oPC, "showmsg") - 10;
SetLocalInt(oPC, "showmsg", m);
SetLocalInt(oPC, "sel", m);
SetLocalInt(oPC, "cc_level", 0);
InitConv(oPC, "msg");
} else if (typ == "del") {
string msg = IntToString(GetLocalInt(oPC, "sel"));
string title = GetCampaignString(GetModuleName(), "from" + msg);
title = "<c<> >** deleted **</c>" + GetSubString(title, FindSubString(title, " <c <20> >by"), 100);
SetCampaignString(GetModuleName(), "from" + msg, title);
SetCampaignString(GetModuleName(), "msg" + msg, "message deleted by " + GetPCPlayerName(oPC));
SetLocalInt(oPC, "cc_level", 0);
InitConv(oPC, "msg");
} else {
//AssignCommand(oPC, SpeakString("Sel=" + GetSubString(act, 4, 10)));
SetLocalInt(oPC, "sel", StringToInt(GetSubString(act, 4, 10)));
SetLocalInt(oPC, "cc_level", 0);
InitConv(oPC, "msg");
}
} else if (GetStringLeft(act, 5) == "priv_") { // Handle Private Messages
string typ = GetSubString(act, 5, 60);
if (GetStringLeft(typ, 4) == "sel_") { // Handle select player to allow
typ = GetSubString(typ, 4, 50);
object creature = GetNearestObjectByTag("scribe", oPC);
string allow = AllowAdd(creature, GetPCPlayerName(oPC), typ);
string allow2 = AllowAdd(creature, typ, GetPCPlayerName(oPC));
if (allow != "" && allow2 != "") {
//AssignCommand(creature, SpeakString(allow + " - " + allow2));
creature = FindPlayer(typ);
SetLocalObject(creature, "who", oPC);
SetLocalString(creature, "allow", allow);
SetLocalString(creature, "allow2", allow2);
InitConv(oPC, "");
SetLocalString(creature, "cc_event", "init_allow");
ExecuteScript("cc_event", creature);
}
} else if (GetStringLeft(typ, 5) == "pmsg_") { // Handle select Priv Message
SetLocalInt(oPC, "privsel", StringToInt(GetSubString(typ, 5, 10)));
SetLocalInt(oPC, "cc_level", 0);
InitConv(oPC, "priv");
} else if (GetStringLeft(typ, 6) == "psend_") { // Handle send Priv Message
string who = GetSubString(typ, 6, 50);
SetLocalString(oPC, "to", who);
AssignCommand(GetNearestObjectByTag("scribe", oPC), SpeakString("Speak message title"));
SetLocalString(oPC, "title", ".");
InitConv(oPC, ""); // end conversation
} else if (GetStringLeft(typ, 5) == "ppost") { // Handle Post Private Message
string to = GetLocalString(oPC, "to");
int msgcnt = GetCampaignInt(GetModuleName(), "msgcnt" + to) + 1;
SetCampaignInt(GetModuleName(), "msgcnt" + to, msgcnt);
string msg = to + IntToString(msgcnt);
SetCampaignString(GetModuleName(), "from" + msg, FixName(GetLocalString(oPC, "title")));
SetCampaignString(GetModuleName(), "msg" + msg, GetLocalString(oPC, "msg"));
SetLocalInt(oPC, "cc_level", 0);
InitConv(oPC, "priv");
} else if (GetStringLeft(typ, 3) == "yes") { // Handle Priv Message allow confirm
object who = GetLocalObject(oPC, "who");
SetCampaignString(GetModuleName(), "allow"+GetPCPlayerName(oPC), GetLocalString(who, "allow2"));
SetCampaignString(GetModuleName(), "allow"+GetPCPlayerName(who), GetLocalString(who, "allow"));
InitConv(oPC, "");
SetLocalString(who, "cc_event", "init_priv");
ExecuteScript("cc_event", who);
} else if (GetStringLeft(typ, 5) == "prem_") { // remove name from allow list
string who = GetSubString(typ, 5, 50);
AllowDel(GetPCPlayerName(oPC), who);
AllowDel(who, GetPCPlayerName(oPC));
InitConv(oPC, "prem");
} else if (typ == "back") {
int m = GetLocalInt(oPC, "privshow") - 10;
SetLocalInt(oPC, "privshow", m);
SetLocalInt(oPC, "sel", m);
SetLocalInt(oPC, "cc_level", 0);
InitConv(oPC, "priv");
}
}
}
string SetMsg(int n, object oPC)
{
// object oPC = GetLastSpeaker();
string msg = GetLocalString(oPC, "cc_msg" + IntToString(n));
if (msg != "") {
SetCustomToken(CUSTOM_TOKEN + n, msg);
return "1";
}
return "";
}
void main()
{
// object oPC = GetLastSpeaker();
object oPC = OBJECT_SELF;
string e = GetLocalString(oPC, "cc_event");
// WriteTimestampedLogEntry("<" + GetName(oPC) + "> " + e);
if (GetStringLeft(e, 4) == "chk_") {
SetLocalString(oPC, "cc_event", SetMsg(StringToInt(GetSubString(e, 4, GetStringLength(e)-4)), oPC));
} else if (GetStringLeft(e, 3) == "do_") {
DoAction(StringToInt(GetSubString(e, 3, GetStringLength(e)-3)), oPC);
} else if (GetStringLeft(e, 5) == "init_") {
InitConv(oPC, GetSubString(e, 5, GetStringLength(e)-5));
//BeginConversation("customconv", oPC);
if (GetLocalInt(oPC, "emotesit") != 0) {
DeleteLocalInt(oPC, "emotesit");
} else {
AssignCommand(oPC, ClearAllActions(TRUE));
}
AssignCommand(oPC, ActionStartConversation(oPC, "customconv", TRUE));
}
}