(POL093)
When a player kills a monster, I want the combat skill they've used to kill the monster to be boosted depending on a variable I will attach to each mob.
I think it's going to require:
1) Creating a new inc or src (in pkg/opt/newcombat), I'm too newbie to know which.
2) Adding a line to death.src (scripts/misc/death.src)
3) Adding a new variable to each monster in npcdesc.cfg
I've followed this thread closely, since the premise is similar. But I'm quite a newbie and I know I'm going to need help.
1) Here is the (undoubtably lacking in some basic functionality) newcombat file I've created:
Code: Select all
var newcombatskill := 0
//who is attacking
function IdentifyAttacker( who )
var newcombat_hit_list := GetObjProperty( who, "Hitlist" );
if( newcombat_hit_list )
EraseObjProperty( who, "Hitlist" );
foreach arr in newcombat_hit_list
if( ReadGameClock() < Cint(arr[3]) + 300 ) // what is this delay meant to do?
var attacker := SystemFindObjectBySerial( Cint(arr[1]) );
if( !attacker )
attacker := SystemFindObjectBySerial( Cint(arr[1]), SYSFIND_SEARCH_OFFLINE_MOBILES );
endif
if( attacker )
AffectCombatSkillForKill( attacker, who, CDbl(arr[2]) / Len(newcombat_hit_list) );
endif
endif
endforeach
endif
endfunction
//define which skill the attacker is using and add the boost
function AffectCombatSkillForKill( attacker , newcombatskill , weapon , skillid )
if ( attacker )
if ( newcombatskill != 0 )
if ( weapon.skillid = SKILLID_FENCING )
SetRawSkill ( who , SKILLID_FENCING , Cint(rawskill + newcombatskill) );
SetRawSkill ( who , SKILLID_TACTICS , Cint(rawskill + newcombatskill) );
SetRawSkill ( who , SKILLID_PARRY , Cint(rawskill + newcombatskill) );
endif
if ( weapon.skillid = SKILLID_MACEFIGHTING )
SetRawSkill ( who , SKILLID_MACEFIGHTING , Cint(rawskill + newcombatskill) );
SetRawSkill ( who , SKILLID_TACTICS , Cint(rawskill + newcombatskill) );
SetRawSkill ( who , SKILLID_PARRY , Cint(rawskill + newcombatskill) );
endif
if ( weapon.skillid = SKILLID_SWORDSMANSHIP )
SetRawSkill ( who , SKILLID_SWORDSMANSHIP , Cint(rawskill + newcombatskill) );
SetRawSkill ( who , SKILLID_TACTICS , Cint(rawskill + newcombatskill) );
SetRawSkill ( who , SKILLID_PARRY , Cint(rawskill + newcombatskill) );
endif
if ( weapon.skillid = SKILLID_WRESTLING )
SetRawSkill ( who , SKILLID_WRESTLING , Cint(rawskill + newcombatskill) );
SetRawSkill ( who , SKILLID_TACTICS , Cint(rawskill + newcombatskill) );
SetRawSkill ( who , SKILLID_PARRY , Cint(rawskill + newcombatskill) );
endif
if ( weapon.skillid = SKILLID_ARCHERY )
SetRawSkill ( who , SKILLID_ARCHERY , Cint(rawskill + newcombatskill) );
endif
endif
endfunction2) This is the only line I've added within the npcdeath (corpse) program within death.src
Code: Select all
program npcdeath(corpse)
var newcombatskill := CInt(GetObjProperty(corpse, "EXP"));
endprogramCode: Select all
NpcTemplate goldendragon
{
Name a Golden Dragon
script firebreather
objtype 0xc
Color 48
TrueColor 48
Gender 0
STR 200
INT 200
DEX 200
HITS 1000
MANA 500
STAM 100
EXP 5000
Tactics 150
MaceFighting 190
Magery 150
MagicResistance 100
Parry 100
DetectingHidden 200
spell flamestrike
spell ebolt
spell lightning
spell chainlightning
spell masscurse
spell earthquake
spell manavamp
spell paralyze
Equip goldendragon
deathsnd 0x16f
tameskill 160
alignment evil
hostile 1
virtue 8
provoke 150
lootgroup 105
MagicItemChance 99
MagicItemLevel 8
dstart 10
CProp snoopme i150
Cprop stealme i150
CProp looter s1
CProp Type sDragonkin
CProp BaseStrmod i1050
CProp BaseIntmod i300
CProp BaseDexmod i250
CProp Permmr i6
CProp PermPoisonImmunity i8
CProp PermMagicImmunity i7
CProp FireProtection i4
CProp AirProtection i4
CProp EarthProtection i4
CProp WaterProtection i2
CProp BaseHpRegen i500
CProp BaseManaRegen i500
}Thanks!
