Kulyok Posted June 22, 2009 Share Posted June 22, 2009 Originally written for Pen52; I hope it can help you, as well. And here're a few new coding tips: 1) Suppose you are writing an NPC(romance) mod, and you need an influence variable, or something like "KivanLikes"/"KivanDislikes" variable from Domi's Kivan of Shilmista. Here's how it's done: setting Sarevok's(for example) influence variable is very-very easy. Example: was: ++ ~Torture? And here I thought we were getting along so well. ~ + Sare8knives2 (SareInfluence +1) is: ++ ~Torture? And here I thought we were getting along so well. ~ DO ~IncrementGlobal("SareInfluence","GLOBAL",1)~ + Sare8knives2 IncrementGlobal = add something to this variable. IncrementGlobal("SarekInfluence","GLOBAL",1)=SareInfluence+1. Obviously, decreasing it is just as easy: was: ++ ~Please, don’t hurt me. ~ + Sare8knives4 (SareInfluence -1) is: ++ ~Please, don’t hurt me. ~ DO ~IncrementGlobal("SareInfluence","GLOBAL",-1)~ + Sare8knives4 2) Comments in your code: Also, if you want to use comments in your code, you can use these symbols: /* note */ This way the compiler will ignore them - and will not tell us that there's a mistake. Example: was: IF ~~ Sare8knives4 (and -1=<SareInfluence<2) is: IF ~~ Sare8knives4 /* (and -1=<SareInfluence<2) */ You can also use IF ~~ Sare8knives4 // (and -1=<SareInfluence<2) - but be careful: "//" can only work for one line. If you've got long commentary, it will have to go like this: // make sure // you use tildas // and finish each state with an END 3) If we have to choose Sarevok's answer to PC, depending on SareInfluence, here's what we do. Original code: ++ ~Please, don’t hurt me. ~ DO ~IncrementGlobal("SareInfluence","GLOBAL",-1)~ + Sare8knives4 IF ~~ Sare8knives4 /* (and SareInfluence=>2) */ SAY ~So those knees of yours do know how to bend. ~ IF ~~ + Sare8knives1 END IF ~~ Sare8knives4 /* (and -1=<SareInfluence<2) */ SAY ~Pleading does not become you. ~ IF ~~ + Sare8knives1 END How do we actually code it? The answer very simple: we write two replies, one for one condition, one for another. And we insert our condition in both replies between two "+"'s, in tildas: + ~GlobalGT("SareInfluence","GLOBAL",1)~ + ~Please, don’t hurt me. ~ DO ~IncrementGlobal("SareInfluence","GLOBAL",-1)~ + Sare8knives4 + ~GlobalLT("SareInfluence","GLOBAL",2)~ + ~Please, don’t hurt me. ~ DO ~IncrementGlobal("SareInfluence","GLOBAL",-1)~ + Sare8knives4 GlobalLT means that variable is less than(SareInfluence<2); GlobalGT means that variable is greater than(SareInfluence>=2, or SareInfluence>1) If you want to add another condition(SareInfluence>=-1, or SareInfluence>-2), you just need to add an extra condition toi the line(no AND's): + ~GlobalGT("SareInfluence","GLOBAL",1)~ + ~Please, don’t hurt me. ~ DO ~IncrementGlobal("SareInfluence","GLOBAL",-1)~ + Sare8knives4 + ~GlobalGT("SareInfluence","GLOBAL",-2) GlobalLT("SareInfluence","GLOBAL",2)~ + ~Please, don’t hurt me. ~ DO ~IncrementGlobal("SareInfluence","GLOBAL",-1)~ + Sare8knives4 4) Conditions for PC responses(race, class, etc) Race is simple: + ~Race(Player1,ELF)~ + ~I am an elf.~ + elf + ~!Race(Player1,ELF)~ + ~I am not an elf.~ + notelf /* ! means NOT */ + ~OR(2) Race(Player1,ELF) Race(Player1,HALF_ELF)~ + ~I am an elf or a half-elf.~ + elfish /* OR(2) and _two_ commands after it means A or B */ Also, races can be HUMAN, HALFLING, DWARF, GNOME or HALFORC. Gender: Gender(Player1,FEMALE) - Player1 is a woman Gender(Player1,MALE) - Player1 is a man Class id but basically the same: + ~Class(Player1,MAGE_ALL)~ + ~I am a wild mage, a mage, a sorcerer!~ + mage_or_sorcerer_or_wild_mage + ~Class(Player1,BARD_ALL)~ + ~I am a bard! A scald! A jester! A blade!~ + bards + ~!Class(Player1,MAGE_ALL) !Class(Player1,BARD_ALL)~ + ~I cannot cast mage spells.~ + notmageandnotbard + ~Class(Player1,FIGHTER_ALL)~ + ~I am a cool fighter!~ + fighter Others: DRUID_ALL, CLERIC_ALL, PALADIN_ALL, RANGER_ALL, MONK, SORCERER. Stats are a tad more difficult: CheckStatGT and CheckStatLT are two commands you will need. For example: CheckStatGT(Player1,11,INT) means that Player1's Intelligence > 11 (12 or higher). + ~CheckStatGT(Player1,12,CHR)~ + ~I am pretty!~ + cha_13_or_higher + ~CheckStatLT(Player1,10,STR)~ + ~I am weak.~ + str_9_or_lower All stats are: STR, DEX, CON, INT, WIS, CHR(not CHA!!). Just in case - here is a full list of various commands(it looks complicated, though): http://iesdp.gibberlings3.net/scripting/tr...bg2triggers.htm 5) Setting and checking variables: Now, there are two commands. Setting a variable is simple, just like with CLUAConsole: SetGlobal("variablename","GLOBAL",2) And checking if our variable is 2 or not 2 is even simpler: Global("variablename","GLOBAL",2) checks if your variable=2 or not. Clean code follows: If you want to set SarevokPCLie=1(if PC lies), it's usually best to do it this way: ++ ~I love you, Sarevok! (truth)~ + sarevok_replies_truth /* we do nothing */ ++ ~I love you, Sarevok! (lie)~ DO ~SetGlobal("SarevokPCLie","GLOBAL",1)~ + sarevok_replies_lie /* we set a variable*/ Now, if you want to check a variable, then you can do it this way: + ~Global("RE_SarevokPCLie","GLOBAL",0)~ + ~I never lied to you before, Sarevok!~ + this_is_true_sarevok_replies + ~Global("RE_SarevokPCLie","GLOBAL",1)~ + ~I never lied to you before, Sarevok!~ + this_is_NOT_true_sarevok_replies Link to comment
Recommended Posts
Archived
This topic is now archived and is closed to further replies.