help on updating to 096 from 095

Here you can post threads requesting help on the official POL Ultima Online Emulator Core 096.
Note: Core 096 is no longer officially supported.
Post Reply
Zauriel
New User
Posts: 8
Joined: Sun Feb 19, 2006 8:03 pm

help on updating to 096 from 095

Post by Zauriel »

is there a way to update from 095 to 096 without the loss of scripts or info ? i mean the user databases the items. spawns are not so important but the databases are
User avatar
CWO
POL Expert
Posts: 1160
Joined: Sat Feb 04, 2006 5:49 pm

Post by CWO »

data is completely useable. All you need to do is go through the changelog and see what you have to update in your scripts. Mostly if you're using only one map, its a lot easier. Once you try and use multiple maps, that will probably be the most time consuming change.
Zauriel
New User
Posts: 8
Joined: Sun Feb 19, 2006 8:03 pm

Post by Zauriel »

well we r using the reg map that comes with the pol 095... no special maps or anything besides a few tourney arenas we made. we are also having some issues with a few scripts that refuse to work, for instance when u heal with a bandie and the charactr is poisoned, it wont cure but just heal, only magic cure spell and pots work against poison ... anyone know what might be giving this bug ? since we had a working one, but the poison damages were not shown on the clients and the poison would not decrease hp nor stamina... the poison damages were too low and im just a script noobie :D any help would e loved
User avatar
CWO
POL Expert
Posts: 1160
Joined: Sat Feb 04, 2006 5:49 pm

Post by CWO »

first of all, check where the poisoning happens like the poison spell. Next, check what actually cures it. If a script is started by the poison spell, check that script to see what its looking at in order to keep going and just make sure your healing scripts reverse that. If your cure spell works, thats the code you should be looking at and making sure your healing script does that.
Zauriel
New User
Posts: 8
Joined: Sun Feb 19, 2006 8:03 pm

Post by Zauriel »

thank you very much mate :D ill be trying to fix it asap :D
Zauriel
New User
Posts: 8
Joined: Sun Feb 19, 2006 8:03 pm

Post by Zauriel »

well it aint working no matter what im doing to the script. ima post the code here so u guys caa check it and see if anyone can help me

Code: Select all

use uo;
use os;
use npc;
use util;
use cfgfile;

include "include/dist";
include "include/client";
include "include/res";
//include "include/respenalty";
include "include/canaccess";
include "include/attributes";
include ":poisonwatcher:poisons";


var clock := ReadGameClock();
var healing, Anatomyskill;

program use_bandages (who, item)
  healing := GetAttribute(who, "healing");
  Anatomyskill := GetAttribute(who, "anatomy");
  EraseObjProperty(who, "IsMeditating");
  if(!can_access(who, item))
    return;
  endif
  if(item.movable == 0)
    SendSysMessage(who, "You cannot use that.");
    return;
  endif
//  var Sleeptime;
  if(!ReserveItem(item))
    return;
  endif
  if(!GetObjProperty(who, "HealTimer"))
    EraseObjProperty(who, "#Healing");
  elseif(clock != GetObjProperty(who, "HealTimer"))
    EraseObjProperty(who, "#Healing");
  endif
  if(GetObjProperty(who, "#Healing"))
    SendSysmessage(who, "You can only heal one person at a time!");
    return;
  endif
  SendSysmessage(who, "who would you like to heal?");
  var patient;
  if (GetObjProperty (who, "#dotheal"))
    patient := who;
  else
    patient  := Target(who, TGTOPT_HELPFUL + TGTOPT_CHECK_LOS);
  endif
  if(!patient)
    SendSysmessage(who, "Cancelled.");
    EraseObjProperty(who, "#Healing");
    return;
  endif
//  var Anatomyskil:= GetBaseSkill(who, SKILLID_ANATOMY);
//  var poisons := ListPoisonsByType(patient, "defaultPoisons");
  if(dist(who, patient) >= 2)
    SendSysMessage(who, "Your patient is too far");
    EraseObjProperty(who, "#Healing");
    return;
  elseif(!CheckLineOfSight(who,patient))
	SendSysMessage(who,"You are unable to see your patient");
        EraseObjProperty(who, "#Healing");
	return;
  elseif((GetHp(patient) >= GetMaxHp(patient)) and (ListPoisonsByType(patient, "defaultPoison").size() == 0))
	SendSysMessage(who,"Your patient is at full health");
        EraseObjProperty(who, "#Healing");
	return;
  endif
  detach();
  SetObjProperty(who, "HealTimer", clock);
  if((patient.graphic == 0x190) or (patient.graphic == 0x191) )
  	if(Patient.serial == who.serial)
	  if(ListPoisonsByType(patient, "defaultPoison").size() > 0)
        SendSysMessage(who,"You start to cure yourself.");
        if(SubtractAmount(Item , 1))
		  cure(who, patient);
        endif
      else
        SendSysMessage(who,"You start to heal yourself.");
        if(SubtractAmount(Item , 1))
		  heal(who, patient);
        endif
	  endif
    elseif(ListPoisonsByType(patient, "defaultPoison").size() > 0)
      if(Patient.dead)
		SendSysMessage(who,"Your patient is dead.");
                EraseObjProperty(who, "#Healing");
		return;
      elseif(!CheckLineOfSight(who,patient))
        SendSysMessage(who,"You cant see you patient.");
        EraseObjProperty(who, "#Healing");
        return;
      endif
      if(SubtractAmount( Item , 1 ) and (dist(who, patient) <= 1))
        SendSysMessage(who,"You start to cure " + patient.name);
        SendSysMessage(patient,who.name + " starts to cure you.");
        cure(who, patient);
      else
        SendSysMessage(who, "Your Patient is too far.");
        EraseObjProperty(who, "#Healing");
        return;
      endif
	else
      if(Patient.dead)
		SendSysMessage(who,"Your patient is dead.");
                EraseObjProperty(who, "#Healing");
		return;
	  elseif(!CheckLineOfSight(who, patient))
		SendSysMessage(who,"You cant see you patient.");
        EraseObjProperty(who, "#Healing");
        return;
      endif
      if(SubtractAmount(Item , 1) and (dist(who, patient) <= 1))
        SendSysMessage(who,"You start to heal "+patient.name);
        SendSysMessage(patient,who.name+" starts to heal you.");
        heal(who, patient);
      else
        SendSysMessage(who, "Your patient is too far.");
        EraseObjProperty(who, "#Healing");
        return;
      endif
    endif
  elseif(patient.dead)
    if(!CheckLineOfSight(who,patient))
	  SendSysMessage(who,"You cant see your patient anymore.");
          EraseObjProperty(who, "#Healing");
	  return;
    endif
    if(SubtractAmount( Item , 1 ) and (dist(who, patient) <= 1))
      SendSysMessage(who,"You start to resurrect " + patient.name);
      SendSysMessage(patient, who.name + " starts to resurrect you.");
      resurrect_pc (who, patient);
    else
      SendSysMessage(who, "Your Patient is too far.");
      EraseObjProperty(who, "#Healing");
      return;
    endif
  elseif(patient.npctemplate)
    var parms := {};
    parms[1] := patient;
    parms[2] := who;
    if(dist(who, patient) < 2)
      if(SubtractAmount(Item, 1))
        start_script(":veterinary:vet", parms);
        EraseObjProperty(who, "#Healing");
        return;
      endif
    else
      SendSysMessage(who, "Your patient is too far.");
      EraseObjProperty(who, "#Healing");
      return;
    endif
  else
    SendSysmessage( who , "You cant heal that." );
    EraseObjProperty(who, "#Healing");
    return;
  endif
endprogram

function heal(who, patient)
  SetObjProperty(who, "#Healing", 1);
  var chp;
  var healingskill := (Cint(GetBaseSkill(who, SKILLID_HEALING)) / 2);
  var anatomy := (Cint(GetBaseSkill(who, SKILLID_ANATOMY)) / 5);
  var healamt := healingskill + anatomy + 10;
  var basehealamt := healamt;
  var counter := 0;
  var cycles;
  var count := 0;
  if(patient == who)
    var dexcheck := (GetBaseDexterity(who) / 20);
    cycles := (12 - dexcheck);
  else
    if(GetBaseDexterity(who) <= 33)
      cycles := 5;
    elseif(GetBaseDexterity(who) <= 67)
      cycles := 4;
    else
      cycles := 3;
    endif
  endif
  var chk := 0;
  while(counter <= cycles)
    if(!GetObjProperty(who, "HealTimer"))
      chk := 1;
      EraseObjProperty(who, "#Healing");
      break;
    elseif(clock != GetObjProperty(who, "HealTimer"))
      EraseObjProperty(who, "#Healing");
      break;
    endif
    chp := GetHP(who);
    sleep(1);
    if(dist(who, patient) > 1)
      sendsysmessage(who,"Your patient isnt close enough.");
      sendsysmessage(patient, who.name + " has stopped healing you.");
      EraseObjProperty(who, "#Healing");
      break;
    endif
    if(GetHP(who) < chp)
      if((RandomInt(basehealamt)+1) >= GetBaseDexterity(who))
        SendSysMessage( who, "Your fingers slip." );
        healamt := (healamt * 0.90);
        count := count + 1;
        if(count >= 5)
          healamt := 5;
        endif
      endif
    endif
    if(patient.graphic == 970)
      resurrect_pc(who, patient);
      break;
    endif
    if(getobjproperty(patient,"poison_level"))
      cure(who, patient);
      break;
    endif
    if(counter >= cycles)
      var diff := 100 - Cint((GetHP(patient) * 100.0) / GetMaxHP(patient));
      if(CheckSkill(who, SKILLID_HEALING, diff, 0))
        if(healamt <= 5)
          sendsysmessage(who,"You finish applying the bandages, but they barely help.");
          EraseObjProperty(who, "#Healing");
        endif
        if((GetMaxHP(patient) - GetHP(patient)) >= healamt)
          healdamage(patient, healamt);
          AwardPoints(who, SKILLID_HEALING, (healamt * 2));
          EraseObjProperty(who, "#Healing");
        else
          healamt := (GetMaxHP(patient) - GetHP(patient));
          healdamage(patient, healamt);
          AwardPoints(who, SKILLID_HEALING, (healamt * 2));
          EraseObjProperty(who, "#Healing");
        endif
        if(GetHP(patient) >= GetMaxHP(patient))
		  sendsysmessage(who, "you have healed your patient completely");
		  sendsysmessage(patient, who.name + " has completely healed you.");
                  EraseObjProperty(who, "#Healing");
        else
		  sendsysmessage(who, "you successfully heal " + patient.name);
		  sendsysmessage(patient, who.name + " has partially healed you.");
                  EraseObjProperty(who, "#Healing");
	    endif
        break;
      else
        SendSysmessage ( who , "You could not heal him." );
        EraseObjProperty(who, "#Healing");
      endif
    endif
    counter := counter + 1;
  endwhile
  if(chk == 1)
    SendSysMessage(who, "You stop healing your patient.");
    EraseObjProperty(who, "#Healing");
    return;
  endif
endfunction


function dacure(who, patient)
  SetObjProperty(who, "#Healing", 1);
  var chp;
  var healing := (Cint(GetBaseSkill(who, SKILLID_HEALING)) / 25);
  var anatomy := (Cint(GetBaseSkill(who, SKILLID_ANATOMY)) / 50);
//  var healamt := healing + anatomy;
  var healamt := Cint(healing / 20) + Cint(anatomy / 50);
  var counter := 0;
  var cycles;
  var count := 0;
  if(patient == who)
    var dexcheck := cint((GetBaseDexterity(who) / 20) + randomint(2));
    cycles := (10 - dexcheck);
  else
    if(GetBaseDexterity(who) <= 33)
      cycles := 5;
    elseif(GetBaseDexterity(who) <= 67)
      cycles := 4;
    else
      cycles := 3;
    endif
  endif
  var chk := 0;
	while(counter <= cycles)
		var chp := GetHP(who);
		sleep(1);
		if(!GetObjProperty(who, "HealTimer"))
			SendSysMessage(who, "You stop healing your patient.");
			SendSysMessage(patient, who.name + " has stopped healing you.");
			break;
		elseif(clock != GetObjProperty(who, "HealTimer"))
			break;
		elseif(dist(who, patient) > 1)
			SendSysMessage(who, "Your patient isn't close enough.");
			SendSysMessage(patient, who.name + " has stopped healing you.");
			break;
		elseif((patient.dead) and (patient != who))
			SendSysMessage(who, "You start to resurrect " + patient.name + ".");
			SendSysMessage(patient, who.name + " starts to resurrect you.");
			resurrect_pc(who, patient);
			break;
		elseif(ListPoisonsByType(patient, "defaultPoison").size() == 0)
			SendSysMessage(who,"You start to heal " + patient.name + ".");
			if(patient != who)
				SendSysMessage(patient, who.name + " starts to heal you.");
			endif
			heal(who, patient);
			break;
		elseif(GetHP(who) < chp)
			if((RandomInt(100)+1) > GetBaseDexterity(who))
				SendSysMessage( who, "Your fingers slip." );
				healamt := (healamt - 1);
				count := count + 1;
				if(count >= 5)
					healamt := 0;
				endif
			endif
		endif
		if(counter >= cycles)
			if(CheckSkill(who, SKILLID_HEALING, 48, 0))
				CurePoison(patient, 120, "defaultPoison", healamt);
	if (ListPoisonsByType(patient, "defaultPoison").size() == 0)
					SendSysMessage(who,"You have completely cured your patient.");
					SendSysMessage(patient, who.name + " has cured you completely.");
					AwardPoints(who, SKILLID_HEALING, (healamt * 75));
	else
		SendSysMessage(who, "You have helped curing your patient but he is still poisoned.");
		SendSysMessage(patient, who.name + " has tried to cure your poison.");
		AwardPoints(who, SKILLID_HEALING, (CInt(healamt/2)));
	endif
				break;
			else
				SendSysMessage ( who , "You could not heal him." );
			endif
		endif
		counter := counter + 1;
	endwhile
  if(chk == 1)
    SendSysMessage(who, "You stop curing your patient.");
    EraseObjProperty(who, "#Healing");
    return;
  endif
endfunction




function cure(who, patient)
  SetObjProperty(who, "#Healing", 1);
  var chp;
  var healing := (Cint(GetBaseSkill(who, SKILLID_HEALING)) / 25);
  var anatomy := (Cint(GetBaseSkill(who, SKILLID_ANATOMY)) / 50);
  var healamt := healing + anatomy;
  var counter := 0;
  var cycles;
  var count := 0;
  if(patient == who)
    var dexcheck := (GetBaseDexterity(who) / 20);
    cycles := (15 - dexcheck);
  else
    if(GetBaseDexterity(who) <= 33)
      cycles := 5;
    elseif(GetBaseDexterity(who) <= 67)
      cycles := 4;
    else
      cycles := 3;
    endif
  endif
  var chk := 0;
  while(counter <= cycles)
    if(!GetObjProperty(who, "HealTimer"))
      chk := 1;
      EraseObjProperty(who, "#Healing");
      break;
    elseif(clock != GetObjProperty(who, "HealTimer"))
      EraseObjProperty(who, "#Healing");
      break;
    endif
    chp:=GetHP(who);
    sleep(1);
    if(dist(who, patient) > 1)
      sendsysmessage(who,"Your patient isnt close enough.");
      sendsysmessage(patient, who.name + " has stopped healing you.");
      EraseObjProperty(who, "#Healing");
      break;
    endif
	if(GetHP(who) < chp)
      if((RandomInt(100)+1) > GetBaseDexterity(who))
	    SendSysMessage( who, "Your fingers slip." );
        healamt := (healamt - 1);
        count := count + 1;
        if(count >= 5)
          healamt := 0;
        endif
      endif
	endif
    if(patient.graphic == 970)
      resurrect_pc(who, patient);
      break;
    endif
    if(counter >= cycles)
      var poisons := ListPoisonsByType(patient, "defaultPoisons");
      var chealamt := 5; //poisons.level * 3;
      if(CheckSkill(who, SKILLID_HEALING, 65, 0) and (Cint(GetBaseSkill(who, SKILLID_HEALING)) >= 60))
        if(healamt > 0)
          CurePoison(patient, 120, "defaultPoison", healamt);
          EraseObjProperty(patient,"poison_level"); // left in to make sure old poison props are not on the character
          if((ListPoisonsByType(patient, "defaultPoison").size() < 1) or (ListPoisonsByType(patient, "defaultPoison").size() == 0) or (!ListPoisonsByType(patient, "defaultPoison").size()))
            SendSysMessage(who,"You have cured " + patient.name + " completely.");
            SendSysMessage(patient, who.name + " has cured you completely.");
            patient.SetPoisoned(0);
            AwardPoints(who, SKILLID_HEALING, (healamt * 5));
            healdamage(patient, chealamt);
            EraseObjProperty(who, "#Healing");
          else
            SendSysMessage(who,"You fail to cure " + patient.name + ".");
            SendSysMessage(patient, who.name + " has failed to cure you.");
            EraseObjProperty(who, "#Healing");
          endif
        else
          sendsysmessage(who,"You finish applying the bandages, but they barely help.");
          EraseObjProperty(who, "#Healing");
        endif
        break;
      else
        SendSysmessage ( who , "You could not cure him." );
        EraseObjProperty(who, "#Healing");
      endif
    endif
    counter := counter + 1;
  endwhile
  if(chk == 1)
    SendSysMessage(who, "You stop curing your patient.");
    EraseObjProperty(who, "#Healing");
    return;
  endif
endfunction

function resurrect_pc(who, patient)
  SetObjProperty(who, "#Healing", 1);
  var chp;
  var healamt := CInt(GetBaseSkill(who, SKILLID_HEALING));
  var sspeak  := (CInt(GetEffectiveSkill(who, SKILLID_SPIRITSPEAK)) / 5);
  if(sspeak <= 1)
    sspeak := 1;
  endif
  var basehealamt := healamt;
  var counter := 0;
  var chk := 0;
  if (patient.multi)
    SendSysMessage(who, "You may not ressurect someone inside a house.",3,31);
    EraseObjProperty(who, "#Healing");
    return;
  endif
  while(counter <= 10)
    if(!GetObjProperty(who, "HealTimer"))
      chk := 1;
      EraseObjProperty(who, "#Healing");
      break;
    elseif(clock != GetObjProperty(who, "HealTimer"))
      EraseObjProperty(who, "#Healing");
      break;
    endif
    chp:=GetHP(who);
    sleep(1);
    if(dist(who, patient) > 1)
      sendsysmessage(who,"Your patient isn't close enough.");
      sendsysmessage(patient, who.name + " has stopped healing you.");
      EraseObjProperty(who, "#Healing");
      break;
    endif
	if(GetHP(who) < chp)
      if((RandomInt(100)+1) > GetBaseDexterity(who))
	    SendSysMessage(who, "Your fingers slip.");
        healamt := (healamt * 0.9);
      endif
	endif
    if(ListPoisonsByType(patient, "defaultPoison").size() > 0)
      CurePoison(patient, 120, "defaultPoison", 100);
      EraseObjProperty(patient,"poison_level"); // left in to make sure old poison props are not on the character
    endif
    if(counter >= 10)
      var sdiff := 85 - CInt(sspeak);
      if((CheckSkill(who, SKILLID_HEALING, sdiff, 0)) and (Cint(GetBaseSkill(who, SKILLID_ANATOMY)) >= 81) and (Cint(GetBaseSkill(who, SKILLID_HEALING)) >= 81))
        if ((patient.multi) or (who.multi))
          SendSysMessage(who, "You may not ressurect inside a house.",3,31);
          EraseObjProperty(who, "#Healing");
          return;
        endif
        if (!CheckLosAt( who, patient.x, patient.y, patient.z ))
          SendSysMessage(who, "You can no longer see your patient.",3,31);
          EraseObjProperty(who, "#Healing");
          return;
        endif
        if((RandomInt(basehealamt) + 1) < healamt);
          AwardPoints(who, SKILLID_HEALING, 50);
          EraseObjProperty(who, "#Healing");
          if(ResNow(patient)==1)
            resurrect(patient);
//            ResPenalties(patient);
            SendSysmessage(who, "You have resurrected " + patient.name);
            EraseObjProperty(who, "#Healing");
          else
            SendSysmessage(who, "The patient refused resurrection." );
            EraseObjProperty(who, "#Healing");
          endif
        else
          SendSysmessage(who, "You could not resurrect him.");
          EraseObjProperty(who, "#Healing");
        endif
      else
        SendSysmessage(who, "You could not resurrect him.");
        EraseObjProperty(who, "#Healing");
        break;
      endif
    endif
    counter := counter + 1;
  endwhile
  if(chk == 1)
    SendSysMessage(who, "You stop healing your patient.");
    EraseObjProperty(who, "#Healing");
    return;
  endif
endfunction
Post Reply